Go言語におけるpackage変数の書き方で「a := 1」といった書き方はできないのでしょうか。
発生している問題・エラーメッセージ
./test.go:8:1: syntax error: non-declaration statement outside function body
該当のソースコード
Go
1package main 2 3import "fmt" 4 5var a int 6a = 1 //エラー部分 7 8func main() { 9 fmt.Println(a) 10}
また、パッケージ変数を「a := 1」としても同様のエラーが出ました。
Go
1package main 2 3import "fmt" 4 5a := 1 //エラー部分 6 7func main() { 8 fmt.Println(a) 9}
試したこと
パッケージ変数を以下のように「var a = 1」として書くと、main関数内に記述しなくとも問題なくmain関数は動作しました。
変更したソースコード
Go
1package main 2 3import "fmt" 4 5var a = 1 //この書き方だとエラーが出ない 6 7func main() { 8 fmt.Println(a) 9} 10 11//出力結果 1
また、「var (a=1, s=...)」のように、パッケージ関数をまとめて定義しても問題なくmain関数は動作しました。
Go
1package main 2 3import "fmt" 4 5var ( 6 a = 1 //このようにまとめて書いてもmain関数は動作する 7 s = "string" 8 b = true 9) 10 11func main() { 12 fmt.Println(a, s, b) 13} 14 15//出力結果 1 string true 16
また、前述のエラーが出た「var a int ~」および「a := 1」という書き方も、main関数内で定義すれば問題なく作動しました。
Go
1package main 2 3import "fmt" 4 5func main() { 6 a := 1 //main関数内であればいずれの書き方でもエラーが出ない 7 fmt.Println(a) 8} 9 10//出力結果 1
以上の結果から、パッケージ関数では「a := 1」といった書き方は正しくなく、「var a = 1」という書き方が正しいという認識で良いのでしょうか。
個人的にはむしろ「var a = 1」という書き方は変則的で、「var a int」と最初に定義したり「a := 1」といった書き方の方が好まれると思っていたので、パッケージ関数についての正しい理解をご教示いただけると幸いです。
補足情報(FW/ツールのバージョンなど)
MacOS Mojave(10.14.5)のターミナルで動作確認しました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/17 13:47
2019/11/17 14:02
2019/11/17 14:05
2019/11/17 14:09
2019/11/17 14:34
2019/11/17 23:53