ホームページ バックエンド開発 Golang Golangで匿名構造体を使用してポインタのスライスを初期化するにはどうすればよいですか?

Golangで匿名構造体を使用してポインタのスライスを初期化するにはどうすればよいですか?

Nov 01, 2024 pm 03:53 PM

How to Initialize Slices of Pointers with Anonymous Structs in Golang?

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

GOPL の第 7 章 (セクション 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>
ログイン後にコピー

これは、Track タイプがすでに定義されており、構文 {1, 2} が新しい名前のない構造体を初期化しているように見えるため、混乱して見えるかもしれません。ただし、この構文は、構造体を明示的に定義せずにスライス タイプの要素を初期化するために使用されるショートカットです。

「{}」表記は本質的に次と同等です。

<code class="go">type Ex struct {
    A, B int
}

a := []Ex{Ex{1, 2}, Ex{3, 4}}</code>
ログイン後にコピー

ここで、型名(Ex)は省略しています。この構文は、ポインターのスライスを初期化する場合でも機能します。

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

これらの場合、& 演算子はポインターを作成するために匿名構造体に自動的に適用されます。

ただし、匿名構造体への参照を含むポインターのスライス (& 演算子なし) は構文エラーになります:

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

匿名構造体を使用してポインターのスライスを初期化するには、匿名構造体を変換する必要があります。

<code class="go">f := []struct{
    A, B int
}{
    {1, 2}, {3, 4}
}
// or with pointers...
g := []*struct{
    A, B int
}{
    {1, 2}, {3, 4}
}</code>
ログイン後にコピー

ここでは、個別の型定義を必要とせずに、匿名構造体がポインターのスライス内に埋め込まれています。この構文は、Golang のマップやその他のコレクションの匿名構造体を初期化するためによく使用されます。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

See all articles