ホームページ  >  記事  >  バックエンド開発  >  Go: 2 番目の項目を追加すると、最初の項目が変更されます

Go: 2 番目の項目を追加すると、最初の項目が変更されます

PHPz
PHPz転載
2024-02-06 11:30:03592ブラウズ

Go: 2 番目の項目を追加すると、最初の項目が変更されます

質問内容

何と言っていいかわかりませんが、コードと出力を見てください。 コード:

リーリー

出力:

リーリー

出力内の people 0 と people 1 の文字列を表示します。 append を使用して buf 0 と buf 1 をマージするので、出力の people 1 文字列は次のようになります。 [[{Alice A1} {Bob A2}]] [{Clark B1} {Davis B2}]、つまり、配列の最初の要素が挿入された要素に変更されますが、そうあるべきではありません。原因は何でしょうか、またその解決方法は何でしょうか?

コード内に問題が見つからなかったので、修正は試みませんでした。


正解


修正方法は、buf変数をforループ内に移動することであるという他の人のコメントには同意しますが、また、この混乱は buf がスライスであることに起因しており、OP がスライスの仕組みを理解していない可能性もあると考えられます。 Go スライス: 使用法と内部機能で説明されているように、スライスは配列とは異なります。

###スライス###

出典を引用した重要な文:

これを念頭に置いて、次の単純化された例を考えてみましょう:

リーリー

出力:

[[2] [2] [2]]

これは、OP が例で観察した動作です。スライスは配列へのポインタであるため、各反復で異なるインスタンスが追加されるように、for ループ内で

buf

を宣言する必要があります。 次に、配列に対して同じ操作を実行するとどうなるかを見てみましょう。

###配列###

出典を引用した重要な文:

次に、配列を渡すとき (つまり、

append

に渡すとき) に、配列の内容で構成されるコピーを示す例を見てみましょう。 リーリー

出力:

[[0] [1] [2]]

さて、同じ

buf 変数が for ループ内で使用されていますが、値はすべて異なります。

以上がGo: 2 番目の項目を追加すると、最初の項目が変更されますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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