2017-07-28 204 views
1

超級Golang noob here。來自其他包的golang結構

這是我的項目結構

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_func結構。

這就是我想要做的事:

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}) 

但我發現了這個錯誤: unknown structs.Built_in field 's' in struct literal

再一次,我是一個超級golang小白。任何幫助:)

+0

請參閱[language spec](https://golang.org/ref/spec#Exported_identifiers)和[去旅行中的「基礎知識」部分](https://tour.golang.org/basics/3) – JimB

回答

8

在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

+0

非常感謝!是超級有用的:) – glyif