Golangでは、私は旅行セールスマンの問題のためにスクランブルスライス機能を作ろうとしています。これをやりながら、私がスライスを編集し始めたときにスクランブル機能が与えられたことに気がつきました。golangスライスは値渡しですか?
私はデバッグの後、私がその機能のスライスを編集していたことが分かりました。しかし、Golangは「価値渡し」言語であると考えられているので、これはどのように可能ですか?
https://play.golang.org/p/mMivoH0TuV
私は私が何を意味するかを示すために遊び場のリンクを提供してきました。 27行目を削除すると、それを残すのとは異なる出力が得られます。これは、関数が引数として渡されたときにスライスの独自のコピーを作成するはずなので、違いはありません。
誰かがこの現象を説明できますか?
そうするソリューションを関数内のスライスのローカルコピーを作成することです。代わりにそれを編集しますか? – duck
@ user4901806渡されたスライスの要素(それが指しているバッキング配列の要素)を変更しない場合は、コピーを作成します。 – icza
要素を追加すると、元のスライスには追加されません。 – Sahas