同じバッキング配列に要素を追加して新しいスライス (pathA と pathB) を作成しているため、コードで変数の上書きの問題が発生します。
Go のスライスの背景:
コードの問題:
コードでは、2 つの新しいスライスを作成しています。 append 関数を使用した pathA と pathB:
pathA := append(route, nextA) pathB := append(route, nextB)
次に何が起こります:
解決策:
この上書きを回避するには、次のことを行う必要があります。 pathA と pathB に一意のバッキング配列があることを確認してください。これを実現するには、make と copy:
newRoute := make([]int, len(route), (cap(route)+1)*2) copy(newRoute, route) if i % 2 == 0 { pathA := append(newRoute, nextA) } else { pathB := append(newRoute, nextB) }を使用して、いずれかの新しいスライスを手動で作成します。
以上がGo で同じ配列のスライスに追加すると変数の上書きが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。