ホームページ > バックエンド開発 > Golang > Go で構造体のスライスをインターフェイスのスライスに割り当てるにはどうすればよいですか?

Go で構造体のスライスをインターフェイスのスライスに割り当てるにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-30 19:19:15
オリジナル
244 人が閲覧しました

How Can I Assign a Slice of Structs to a Slice of Interfaces in Go?

インターフェイス スライスへの構造体のスライスの割り当て

構造体のスライス ([]MyStruct) をインターフェイスのスライス ( []インターフェイス{})を使用すると、コンパイル時エラーが発生する可能性があります。これは、構造体とインターフェイスのメモリ表現が異なるためです。

構造体のフィールドはメモリ内に隣接して格納されますが、インターフェイスは 2 つのワードのペアとして格納され、1 つは型情報用、もう 1 つは実際のデータ用です。この違いにより、直接代入ができなくなります。

考えられる解決策:

  • 要素を個別にコピー: 構造体のスライスを手動で繰り返してコピーできます。各要素をインターフェースに取り込むlice.
y := make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}
ログイン後にコピー
  • インターフェイス ラッパーの使用: Interface{} インターフェイスを実装し、基礎となる構造体を保持するラッパー タイプを作成できます。
type IMyStruct struct {
    MyStruct
}

func (i IMyStruct) Interface() interface{} {
    return i.MyStruct
}

x := []MyStruct{{5}, {6}}
y := []interface{}{IMyStruct{x[0]}, IMyStruct{x[1]}}
ログイン後にコピー
  • 空を使用インターフェイス: 構造体のスライスを空のインターフェイスに割り当てることができ、任意の型の値を保持できます。
var y interface{}
y = x // No type conversion required
ログイン後にコピー

以上がGo で構造体のスライスをインターフェイスのスライスに割り当てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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