ホームページ > バックエンド開発 > Golang > Go では、関数に渡された配列への変更はどのように機能しますか?

Go では、関数に渡された配列への変更はどのように機能しますか?

Patricia Arquette
リリース: 2024-10-31 04:57:01
オリジナル
248 人が閲覧しました

How do modifications to arrays passed to functions work in Go?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート