问题
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