我必须解析一些嵌套的JSON,将其转换为Go类型,如下所示:

1
2
3
4
5
6
7
8
9
10
11
type Config struct {
Mail           struct {
                   From     string
                   To       string
                   Password string
               }
Summary        struct {
                   Send     bool
                   Interval int
               }
}

现在,我想为每个键(邮件,摘要)调用一个函数,我这样尝试过:

utils.StartNewMailer(config.Mail)

问题是,如何构造被调用的函数,我试图镜像Mail结构(并称为mailConfig),因为我无法传递任意结构作为参数。
func StartNewMailer(conf mailConfig){ //...,但这也不起作用,我收到以下编译器错误消息:

cannot use config.Mail (type struct { From string; To string; Password string }) as type utils.mailConfig in argument to utils.StartNewMailer

我是否必须将每个单个值都传递给被调用的函数,或者有更好的方法吗?

  • "我试图镜像Mail结构"是什么意思?
  • 被调用的函数位于另一个模块中,所以我基本上在那做:type mailConfig struct { \tfrom string \tto string \tpassword string }

应该导出utils.mailConfig字段,如Config类型的文字struct字段一样。

1
2
3
4
5
type mailConfig struct {
    From     string
    To       string
    Password string
}

我建议将内部结构声明为类型本身,而不要使用结构文字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)