来自其他包的golang结构

gly*_*yif 1 struct go

情况:

我有以下项目结构:

root
    parser
       parser.go
    builtin
        exit.go
        hi.go
    structs
        base_structs.go
    main.go
Run Code Online (Sandbox Code Playgroud)

..和base_structs.go文件看起来像这样:

package structs

type Built_in_func func([] string)

type Built_in struct {
    s string
    f Built_in_func
}
Run Code Online (Sandbox Code Playgroud)

我已经导入了我的包,我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})
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

结构文字中的未知结构.Built_in字段''

题:

我究竟做错了什么?

eug*_*ioy 11

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

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

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

type Built_in struct {
    S string
    F Built_in_func
}
Run Code Online (Sandbox Code Playgroud)

然后这将工作(再次大写):

structs.Built_in{S:"exit", F:builtin.Exit}
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多:

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