golang全局结构体初始化

Hay*_*aki 0 struct global initialization go

我想声明一个属于某个包的全局结构变量并初始化它。

\n

我有以下目录结构:

\n
main\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\n
Run Code Online (Sandbox Code Playgroud)\n

符号.go

\n
main\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\n
Run Code Online (Sandbox Code Playgroud)\n

逗号.go

\n
package symbol\n\ntype Symbol struct{\n    Name string\n    Format string\n}\n
Run Code Online (Sandbox Code Playgroud)\n

main.go

\n
package symbol\n\nvar Comma = Symbol{}\n\nComma.Name = "Comma"\nComma.Format = ","\n
Run Code Online (Sandbox Code Playgroud)\n

当我运行这个时,它说:
\nsyntax error: non-declaration statement outside function body

\n

我怎样才能解决这个问题 ?

\n

Wan*_*yre 6

声明语句是包级别唯一允许的语句类型。声明

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包初始化时会自动执行函数。