ホームページ > バックエンド開発 > Golang > Go は匿名構造体を使用したポインタのスライスの初期化をどのように処理しますか?

Go は匿名構造体を使用したポインタのスライスの初期化をどのように処理しますか?

Barbara Streisand
リリース: 2024-10-31 15:39:13
オリジナル
447 人が閲覧しました

How does Go handle the initialization of a slice of pointers with anonymous structs?

Go での匿名構造体を使用したポインターのスライスの初期化

「Go プログラミング言語」テキストの第 7.6 章では、スライスの初期化について説明しています。匿名構造体 (明示的な型定義のない構造体) を使用したトラック ポインターは混乱を招く可能性があります。次の例は、これを示しています。

<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>
ログイン後にコピー

ポインターのスライスを初期化する構文は、要素の型の前に * が追加されている点で、構造体のスライスの初期化に似ています。ただし、内部では、この構文は実際にはコンパイル時に指定された型で値のスライスを初期化するためのショートカットです。

<code class="go">f := []<type>{{...}, {...}}</code>
ログイン後にコピー

これは次と同等です:

<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>
ログイン後にコピー

ポインタの場合、次のようになります:

<code class="go">f := []*<type>{{...}, {...}}</code>
ログイン後にコピー

これは次と同等です:

<code class="go">f := []*<type>{&amp;<type>{...}, &amp;<type>{...}}</code>
ログイン後にコピー

これは、匿名構造体構文がポインタのスライスを初期化するのに便利であることを意味します。

ただし、ポインターのスライスを初期化する場合、スライス内で型が一貫している限り、値は匿名の構造体型であってもよいことに注意してください。

<code class="go">a := []Ex{Ex{1, 2}, Ex{3, 4}}
b := []Ex{{1, 2}, {3, 4}}
c := []*Ex{&amp;Ex{1, 2}, &amp;Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}</code>
ログイン後にコピー

匿名の混合と一致次の例のように、通常の構造体を含む構造体は許可されません:

<code class="go">e := []*Ex{{1, 2}, &amp;Ex{3, 4}} // Syntax Error!</code>
ログイン後にコピー

これは、コンパイラーが構造体へのポインターから匿名構造体の型を推論できないために発生します。

以上がGo は匿名構造体を使用したポインタのスライスの初期化をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート