1

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?

PepperoniPizza
  • 8,842
  • 9
  • 58
  • 100
Karsten Morks
  • 175
  • 3
  • 10

1 Answers1

0

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)
Salah Eddine Taouririt
  • 24,925
  • 20
  • 60
  • 96