Hay*_*aki 0 struct global initialization go
我想声明一个属于某个包的全局结构变量并初始化它。
\n我有以下目录结构:
\nmain\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 symbol\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 symbol.go\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Comma.go\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 go.mod\nRun Code Online (Sandbox Code Playgroud)\n符号.go:
\nmain\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 symbol\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 symbol.go\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Comma.go\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 go.mod\nRun Code Online (Sandbox Code Playgroud)\n逗号.go:
\npackage symbol\n\ntype Symbol struct{\n Name string\n Format string\n}\nRun Code Online (Sandbox Code Playgroud)\nmain.go:
\npackage symbol\n\nvar Comma = Symbol{}\n\nComma.Name = "Comma"\nComma.Format = ","\nRun Code Online (Sandbox Code Playgroud)\n当我运行这个时,它说:
\nsyntax error: non-declaration statement outside function body
我怎样才能解决这个问题 ?
\n声明语句是包级别唯一允许的语句类型。声明
Comma.Name = "Comma"
Comma.Format = ","
Run Code Online (Sandbox Code Playgroud)
是赋值语句。赋值不是声明。
有两种方法可以解决该问题。第一种也是首选的方法是使用复合文字来初始化变量声明中的值。
var Comma = Symbol{Name: "Comma", Format: ","}
Run Code Online (Sandbox Code Playgroud)
第二种方法是将赋值语句移至函数中init:
func init() {
Comma.Name = "Comma"
Comma.Format = ","
}
Run Code Online (Sandbox Code Playgroud)
init包初始化时会自动执行函数。