为了账号安全,请及时绑定邮箱和手机立即绑定

将结构的命名字段传递给其他函数

将结构的命名字段传递给其他函数

Go
一只名叫tom的猫 2021-11-22 18:37:07
这是我的第一个golang程序,而不仅仅是阅读文档,所以请耐心等待。我有一个类似的结构:-(来自解析的 yaml)type GLBConfig struct {    GLBList []struct {        Failover string `json:"failover" yaml:"failover"`        GLB      string `json:"glb" yaml:"glb"`        Pool     []struct {            Fqdn              string `json:"fqdn" yaml:"fqdn"`            PercentConsidered int    `json:"percent_considered" yaml:"percent_considered"`        } `json:"pool" yaml:"pool"`    } `json:"glb_list" yaml:"glb_list"`}现在,在我的主函数中,有一个 for 循环来处理每个 GLB:-for _, glb := range config_file.GLBList {    processGLB(glb)}processGLB接收这种类型的函数定义是什么?我试过这样做,但它不起作用,我想知道为什么。func processGLB(glb struct{}) {    fmt.Println(glb)}./glb_workers.go:42: cannot use glb (type struct { Failover string "json:\"failover\" yaml:\"failover\""; Glb string "json:\"glb\" yaml:\"glb\""; Pool []struct { Fqdn string "json:\"fqdn\" yaml:\"fqdn\""; PercentConsidered int "json:\"percent_considered\" yaml:\"percent_considered\"" } "json:\"pool\" yaml:\"pool\"" }) as type struct {} in argument to processGLB然后,稍后进行一些谷歌搜索,这是有效的。func processGLB(glb interface{}) {    fmt.Println(glb)}这样做是个好主意吗?为什么我必须使用接口来传递一个简单的结构命名字段?最后,在 golang 中最优雅/最正确的方法是什么?
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

您真的应该考虑明确定义结构并重用它。使用支持静态类型的语言的全部意义在于尽可能定义您的类型,它有助于编译器找到错误并生成更快的代码。

此外,如果您想要更紧凑的代码,您可以使用匿名字段的概念,尽管我认为这不是最好的方案。


查看完整回答
反对 回复 2021-11-22
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

GLBList 被定义为结构数组。在 Go 中,没有任何东西叫做 struct{}。所有的 go 类型都实现了空接口,因此可以使用空接口来传递结构体(在这种情况下没有名称的结构体)。更多详情http://blog.golang.org/json-and-go

查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信