さまざまなタイプの式の順序に興味があったので、失敗するだろうと考えて最上位の宣言レベルでこのコードを試してみましたが、機能することがわかりました。
http://play.golang.org/p/CfP3DEC5LP
var x = func() *Foo {
fmt.Println(f) // prints &{foobar}
return f
}()
var f = &Foo{"foobar"}
type Foo struct {
bar string
}
ご注意ください:
type Foo struct
宣言は一番下type
宣言の前に、var f
宣言と&Foo{]
割り当てがあります宣言の前に、変数
var
を参照して返す、すぐに呼び出される関数がありf
ます。
値が宣言&Foo{}
の前に作成されたにもかかわらず、値を作成できることはそれほど驚くことではありませんでしたが、代入の前に値を正常に参照および出力できたことには驚きました。type Foo struct
f
これは信頼できる特定の動作ですか? 仕様にはそのような順序付けへの言及は見つかりませんでしたが、おそらく見落としていました。