php小编草莓今天为大家介绍一种常用的技巧——Go。这是一种将一个结构映射到另一个结构的惯用方式。在编程中,我们经常需要将一个数据结构转换为另一个数据结构,以满足不同的需求。Go提供了一种简洁而灵活的方法来实现这个目标。无论是在处理数据库查询结果、API响应还是其他数据转换场景中,Go都能帮助我们轻松完成结构映射的工作。接下来,让我们一起来了解一下Go的具体用法吧!
问题内容
我正在使用第三方 go 语言库来查询用户的 ldap 数据库。该库返回 resultuser 的 searchresult 切片,我需要将其映射到我自己的 user 结构。这两个结构具有不同的字段名称,我只需要 resultuser 中的特定字段。 go 中是否有更惯用的方法将一个结构转换为另一个结构。
我在下面创建了一个演示(go playground 上也有链接)。预先感谢您给这位 go 新手的任何建议!
package main
import "fmt"
type (
User struct {
id int32
firstName string
}
ResultUser struct {
uid int32
fname string
}
SearchResults []ResultUser
)
func main() {
results := getSearchResults()
users := mapResultsToUsers(results) // 登录后复制
我见过结构体字段标签,但不确定是否有更好的方法。
解决方法
我认为您所拥有的几乎是最好的解决方案,尽管我会将映射移至专用函数中,例如:
func fromresultuser(r *resultuser) *user {
return &user{
id: r.uid,
firstname: r.fname,
}
}
登录后复制
然后 mapresultstousers
变为:
func mapresultstousers(results searchresults) (users []*user) {
for _, result := range results {
users = append(users, fromresultuser(result))
}
return users
}
登录后复制
我见过结构体字段标签,但不确定是否有更好的方法。
您可以组合一些内容,以便可以注释您的 user
结构,如下所示:
User struct {
id int32 `mappedFrom:"uid"`
firstName string `mappedFrom:"fname"`
}
登录后复制
但是实现该方法所需的方法比此处介绍的 fromresultuser
复杂得多,并且需要熟悉 reflect
包。我认为,正如我的一位同事喜欢说的那样,“果汁不值得榨”。
以上就是Go - 将一个结构映射到另一个结构的惯用方式的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!