スライスとマップのための Golang の初期化構文
Go では、スライスとマップの宣言と初期化に匿名構造が関与する可能性があり、これにより問題が発生する可能性があります。混乱。これらの初期化手法の微妙な違いを詳しく見てみましょう。
説明のために、GOPL の第 7 章の次の行を考えてみましょう。
<code class="go">var tracks = []*Track{ {"Go", "Delilah", "From the Roots Up", 2012, length("3m38s")}, {"Go", "Moby", "Moby", 1992, length("3m37s")}, {"Go Ahead", "Alicia Keys", "As I Am", 2007, length("4m36s")}, {"Ready 2 Go", "Martin Solveig", "Smash", 2011, length("4m24s")}, }</code>
このコードは、Track ポインターのスライスを定義します。スライスの初期化では、要素は明示的な型宣言のない匿名構造体のように見えます。ただし、Go では、構文ショートカットを使用してこれらの構造を初期化できます。
<code class="go">f := []<type>{{...}, {...}}</code>
この構文は実質的に次と同等です。
<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>
where
<code class="go">f := []*Track{{...}, {...}}</code>
これは次と同等です:
<code class="go">f := []*Track{&Track{...}, &Track{...}}</code>
この構文はマップにも適用されます:
<code class="go">f := map[string]<type>{"a": {...}, "b": {...}} // equivalent to f := map[string]<type>{"a": &<type>{...}, "b": &<type>{...}}</code>
一方、匿名構造体は、個別の型定義のない構造体を指します。匿名型は、構造自体にのみ名前がない匿名構造とは異なります。真の匿名構造体は次のように記述されます:
<code class="go">f := []struct{ A, B int }{ {1, 2}, {3, 4} }</code>
この場合、リスト内の構造体には型定義がなく、匿名で参照されます。初期化の省略表現を使用すると、名前付き型を使用せずにこの構造体を簡単に初期化できます。
以上がGo のスライスとマップの初期化構文は匿名構造をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。