rest - 包含地图的对象?
问题描述
我正在尝试获取我们所有端点的列表。
我们使用果阿。
我注意到我们将所有端点都添加到服务(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 ...]}
解决方案
您可以使用reflect
andunsafe
包来获取底层和未导出的地图值,该值在此处定义(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,因此您不能依赖它的稳定性。
推荐阅读
- javascript - 了解 JS 回调和异步操作
- javascript - “范围”或“上下文”如何在编译程序中存储和引用?
- python - 用于多类分类任务的多层感知器
- sql - 想要获取所有最小值,包括重复值
- docker - 使用这个 Makefile 变量我做错了什么?
- fonts - 如何将 True Type 字体转换为矢量字体
- facebook - 如何在 FB API 中进一步过滤页面 Leadgen 表单以获取活动表单
- r - 编辑R中列中的每一行
- multithreading - 如何正确演示 Go/Golang 中的并发性和并行性?
- python - 将数组与python的所有可能组合相加