来自其他包的golang结构

时间:2017-07-28 01:27:17

标签: go struct

情况:

我有以下项目结构:

root
    parser
       parser.go
    builtin
        exit.go
        hi.go
    structs
        base_structs.go
    main.go

..而base_structs.go文件如下所示:

package structs

type Built_in_func func([] string)

type Built_in struct {
    s string
    f Built_in_func
}

我已在我的main.go中导入了该包,并且我引用了structs.Built_in的结构。

这就是我要做的事情:

var builtin_list [] structs.Built_in

builtin_list = append(builtin_list, structs.Built_in{s:"exit", f:builtin.Exit})
builtin_list = append(builtin_list, structs.Built_in{s:"hi", f:builtin.Hi})

但是我收到了这个错误:

  

未知的structs.Built_in字段's'在struct literal中

问题:

我做错了什么?

1 个答案:

答案 0 :(得分:11)

在Go中,包名外的名称的可见性取决于其第一个字符是否为大写。

因此,s字段实际上从包structs外部看不到,您就会收到该错误。

如果你定义你的结构(注意大写):

type Built_in struct {
    S string
    F Built_in_func
}

然后这将起作用(再次是大写):

structs.Built_in{S:"exit", F:builtin.Exit}

您可以在这里阅读更多内容:

https://golang.org/doc/effective_go.html#names