Golang - pass struct as argument to function

血红的双手。 提交于 2021-01-28 12:24:50

问题


I have to parse some nested JSON, which translates into a Go type, like this:

type Config struct {
Mail           struct {
                   From     string
                   To       string
                   Password string
               }
Summary        struct {
                   Send     bool
                   Interval int
               }
}

Now I want to call a function for each key (Mail, Summary), I tried it like this: utils.StartNewMailer(config.Mail) The problem is, how do I construct the called function, I tried to mirror the Mail struct (and called it mailConfig), since I can't pass an arbitrary struct as an argument.
func StartNewMailer(conf mailConfig){ //..., but that doesn't work either, I get the following compiler error message: cannot use config.Mail (type struct { From string; To string; Password string }) as type utils.mailConfig in argument to utils.StartNewMailer
Do I have to pass in every single value to the called function or is there a nicer way to do this?


回答1:


utils.mailConfig fields should be exported, as in the literal struct field in Config type.

type mailConfig struct {
    From     string
    To       string
    Password string
}

I suggest declaring inner structs as types themselves instead of using struct literals.

type Mail struct {
    From     string
    To       string
    Password string
}

type Summary struct {
    Send     bool
    Interval int
}

type Config struct {
    Mail
    Summary
}

func StartNewMailer(Mail mailConfig)


来源:https://stackoverflow.com/questions/30447073/golang-pass-struct-as-argument-to-function

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!