何と言っていいかわかりませんが、コードと出力を見てください。 コード:
リーリー出力:
リーリー出力内の 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 ループ内で
を宣言する必要があります。
次に、配列に対して同じ操作を実行するとどうなるかを見てみましょう。
出典を引用した重要な文:
に渡すとき) に、配列の内容で構成されるコピーを示す例を見てみましょう。 リーリー
出力:[[0] [1] [2]]
buf 変数が for ループ内で使用されていますが、値はすべて異なります。
以上がGo: 2 番目の項目を追加すると、最初の項目が変更されますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。