6

さまざまなタイプの式の順序に興味があったので、失敗するだろうと考えて最上位の宣言レベルでこのコードを試してみましたが、機能することがわかりました。

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 structf

これは信頼できる特定の動作ですか? 仕様にはそのような順序付けへの言及は見つかりませんでしたが、おそらく見落としていました。

4

1 に答える 1