包含地图的对象?

Posted

技术标签:

【中文标题】包含地图的对象?【英文标题】:Object containing a map? 【发布时间】:2018-06-20 12:22:29 【问题描述】:

我正在尝试获取我们所有端点的列表。

我们使用果阿。

我注意到我们将所有端点添加到服务 (goa.New("service_name"))。我还意识到,如果我打印 service.Mux,我可以看到所有端点。但是,端点看起来像是在一个 Map 中,它包含在一个对象中。打印 service.Mux 时,我也看到了内存地址。如何仅获取端点?

fmt.Println("Service Mux: ", service.Mux)

&0xc42092c640 map[OPTIONS/api/my/endpoint/:endpointID/relationships/links:0x77d370 ...]

【问题讨论】:

它看起来像一个结构。请提供Minimal, Complete, and Verifiable 示例以产生您面临的问题。 @Himanshu 我还需要添加哪些其他最小、完整和可验证的信息?如前所述,服务来自一个名为 Goa 的库:goa.design/implement/mux 只需发布您尝试过的代码和正确的日志输出以及service.Mux的结构 @Himanshu 我已经打印了如何创建新服务,我已经打印了用于打印服务的 println,并且我已经打印了上面的输出....不太确定我错过了什么?跨度> 只需查看 Mux 的文档并使用它提供的任何合适的文件或方法或功能。 【参考方案1】:

您可以使用reflectunsafe 包来获取在此处定义的底层和未导出的地图值 (https://github.com/goadesign/goa/blob/master/mux.go#L48)。

类似这样的:

rv := reflect.ValueOf(service.Mux).Elem()
rf := rv.FieldByName("handles")
rf = reflect.NewAt(rf.Type(), unsafe.Pointer(rf.UnsafeAddr())).Elem()

handles := rf.Interface().(map[string]goa.MuxHandler)
for k, h := range handles 
    fmt.Println(k, h)

但请注意,使用这种方法,您的代码依赖于实现细节而不是公共 API,因此您不能依赖它的稳定性。

【讨论】:

【参考方案2】:

Goa 库目前不支持此功能。 Mux 是一个可用选项很少的接口。不幸的是,在可用的选项中,没有一个用于检索该地图:-(

【讨论】:

您可以使用reflect 包来访问map。例如。 play.golang.org/p/KiLSqDDTWVA @mkopriva 你能把这个作为答案让我选择吗?

以上是关于包含地图的对象?的主要内容,如果未能解决你的问题,请参考以下文章

从 DLL 导出包含 `std::` 对象(矢量、地图等)的类

从 DLL 导出包含 `std::` 对象(矢量、地图等)的类

Flutter使用地图比较2个对象列表并包含不起作用

是否可以在包含地图名称的同时编组一个 go 结构?

我正在尝试创建一个带有位置键的地图,其中包含一个双精度列表作为坐标,但我收到一个错误

检查一个地图是不是包含另一个地图的所有内容