ホームページ  >  記事  >  バックエンド開発  >  golangで要素タイプが名前付きタイプではないスライスに追加する方法

golangで要素タイプが名前付きタイプではないスライスに追加する方法

WBOY
WBOY転載
2024-02-09 10:50:191135ブラウズ

golangで要素タイプが名前付きタイプではないスライスに追加する方法

php Xiaobian Banana では、golang で要素の型が名前付き型ではないスライスにアタッチする方法を紹介します。 Golang では、組み込みの append 関数を使用して要素をスライスに追加できますが、スライスの要素型が名前付き型ではない場合、つまり匿名型である場合は、まず一時的なスライスを作成する必要があります。要素を一時スライスに追加し、最後に一時スライスの要素を元のスライスにコピーして戻します。こうすることで、要素を追加するときに元のスライスのデータが失われることがなくなります。次に、このプロセスの具体的な手順について詳しく説明します。

質問の内容

2つの構造があります:

リーリー

次に、要素タイプが name ではない項目を responsequeryhotel.data.hotels に追加する必要があります。そこで私はこれを試しました:

リーリー

しかし、次のエラーが発生します:

リーリー

アイテムを output.data.hotels に添付するにはどうすればよいですか (複数の responsequeryhotelsdata が添付されます)。

ところで、構造を変更することはできません (私の制御の範囲を超えています)。

回避策

複数回使用する必要がある場合は、同じ基になる型のエイリアスを定義します。

リーリー

または、一度だけ必要な場合は、適切な場所で構造体の型を宣言します。

リーリー

golang 仕様Assignability セクションには次のように記載されています:

次の条件のいずれかが満たされる場合、型 v の値 x は型 t の変数に代入可能です (「x は t に代入可能」)。

    v は t と同じです。
  • v と t は同じ基底型を持ちますが、型パラメーターは持たず、v または t の少なくとも 1 つは名前付き型ではありません。
  • v と t は同じ要素タイプを持つチャネル タイプであり、v は双方向チャネルであり、v または t の少なくとも 1 つは名前付きタイプではありません。
  • t はインターフェイス型ですが型パラメーターではなく、x は t を実装します。
  • x は事前に宣言された識別子 nil で、t はポインタ、関数、スライス、マップ、チャネル、またはインターフェイスの型ですが、型パラメータではありません。
  • x は、型 t の値で表すことができる型なし定数です。

以上がgolangで要素タイプが名前付きタイプではないスライスに追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。