我真的被 Go 中一个看似微不足道的问题困在这里:我有一个 Golang 微服务,它以 json 格式输出数据。假设我有一个带有 json 标签的简单结构用于这个结果:
type Result struct {
Name string `json:"name"`
Age int `json:"age"`
}
在实际从数据库中提取数据的代码部分,我有一个非常相似的结构,如下所示:
type ResultBackend struct {
Name string `bson:"fullName"`
Age int `bson:"age"`
}
除了不同的标签之外,结构体字段是相似的。我想保持简单,只从后端服务 (ResultBackend) 返回一个结构,然后可以将其作为 JSON 响应发送,如下所示:
func process() Result {
var result ResultBackend
... do a MongoDB query here and store results in result variable ...
return result
}
这当然行不通,因为我们这里有两个不同的结构。当然,一种解决方案是将两个标签嵌入到一个结构中,如下所示:
type Result struct {
Name string `json:"name" bson:"fullName"`
Age int `json:"age bson:"age"`
}
然后在主代码和“处理”函数中使用这个结构。这是有效的,但这似乎是用 bson 标签“毒化”了主代码的 Result 结构。例如,如果后端结果是 XML 文件,该怎么办?我还必须将 xml 标记添加到结构中。或者也许有一天标记一些非常晦涩的数据库适配器。在我看来,这似乎不是最干净的方法。我宁愿在主代码中有一个干净的 Result 结构,并且只是从一个结构到另一个结构的转换。
有什么简单的方法可以做到这一点,还是我真的必须将 ResultBackend 结构的所有字段复制到新的 Result 结构并返回它?或者我试图在这里过度简化我的代码?:)
在这里标签与标签的区别,这里能换成标签吗?
块级行级标签转换
问下go中是不是没有class关键字,都是struct吗??
关于提升转换与标准转换的C++问题
相关分类