Go で関数に渡される配列を変更する
一部のプログラミング言語とは異なり、Go は暗黙的に配列を参照渡ししません。配列が関数に渡されると、その値のみがコピーされます。したがって、関数内で渡された配列に加えられた変更は、元の配列には影響しません。
ただし、Go では、配列は明示的に宣言されません。代わりに、基礎となる配列の動的でサイズ変更可能なビューであるスライスを使用します。スライスが関数に渡されると、スライス記述子のみがコピーされます。これには、基になる配列へのポインタ、その長さ、およびその容量が含まれます。
その結果、スライスの要素に加えられた変更はすべてコピーされます。関数内のスライスはすべて同じ基になる配列を参照するため、元のスライスに反映されます。
次のコード例を考えてみましょう。
<code class="go">func main() { tab := []int{1, 2, 3} fmt.Println(tab) // [1 2 3] reverse(tab) fmt.Println(tab) // [3 2 1] } func reverse(tab []int) { for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 { tab[i], tab[j] = tab[j], tab[i] } }</code>
この例では、関数 reverse が使用されます。スライスタブを受け取ります。要素の交換など、関数内のスライス タブに加えられた変更は、両方とも同じ基になる配列を参照するため、元のスライスに影響します。
したがって、Go で配列を関数に渡すときは、次の点に注意してください。スライス記述子のみがコピーされます。関数内のスライスの要素に加えられた変更は、基になる配列への参照により、元のスライスに反映されます。
以上がGo では、関数に渡された配列への変更はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。