php小编草莓今天为大家介绍一种常用的技巧——Go。这是一种将一个结构映射到另一个结构的惯用方式。在编程中,我们经常需要将一个数据结构转换为另一个数据结构,以满足不同的需求。Go提供了一种简洁而灵活的方法来实现这个目标。无论是在处理数据库查询结果、API响应还是其他数据转换场景中,Go都能帮助我们轻松完成结构映射的工作。接下来,让我们一起来了解一下Go的具体用法吧!
问题内容
我正在使用第三方 go 语言库来查询用户的 ldap 数据库。该库返回 resultuser 的 searchresult 切片,我需要将其映射到我自己的 user 结构。这两个结构具有不同的字段名称,我只需要 resultuser 中的特定字段。 go 中是否有更惯用的方法将一个结构转换为另一个结构。
我在下面创建了一个演示(go playground 上也有链接)。预先感谢您给这位 go 新手的任何建议!
package mainimport "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 – 将一个结构映射到另一个结构的惯用方式的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2354964.html