rest - 包含 map 的对象?

标签 rest go mux goa

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

我们使用果阿。

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

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

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

最佳答案

您可以使用 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)
}

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

关于rest - 包含 map 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50948176/

相关文章:

http - 第二个FileServer提供html但不提供图像

golang mux,路由通配符和自定义函数匹配

spring - 尝试用 postman 上传 MultipartFile

java - Jersey 中的字段名称可以与 setter 和 getter 不同吗?

go - 想要选择一个随机数并且在所有数字都通过之前不要再次选择它

go - 如何从 yaml 解码嵌入式结构

java - 使用 JAX-RS 创建 RESTful Web 服务并将其部署到 tomcat

java - RESTful Web 服务实际上做了哪些 HTTP 编程没有做的事情? RESTful WS的主要用途是什么

performance - 我可以进一步优化它以使其运行得更快吗?

go - 我如何编写处理来自 API 的响应/错误的 golang 中间件?