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

这是我的第一个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 中最优雅/最正确的方法是什么?


一只名叫tom的猫
浏览 122回答 2
2回答

繁星coding

您真的应该考虑明确定义结构并重用它。使用支持静态类型的语言的全部意义在于尽可能定义您的类型,它有助于编译器找到错误并生成更快的代码。此外,如果您想要更紧凑的代码,您可以使用匿名字段的概念,尽管我认为这不是最好的方案。

缥缈止盈

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

相关分类

Go