Golang関数パラメータ渡しメモリ管理

王林
リリース: 2024-04-23 17:06:02
オリジナル
331 人が閲覧しました

関数パラメータの受け渡しでは、値型パラメータは値によって渡され、元の値に影響を与えることなくコピーが作成されます。参照型パラメータは参照によって渡され、変更は元の値に影響し、複雑なデータ構造を変更するために使用されます。

Golang関数パラメータ渡しメモリ管理

Go で渡す関数パラメータのメモリ管理

Go では、関数パラメータを値または参照によって渡すことができます。値渡しではパラメーター変数の新しいコピーが作成され、参照渡しでは元の変数への参照が渡されます。

値の受け渡し

値型のパラメーター (int、float、string など) が値によって渡される場合、値のコピーは次のようになります。が作成され、関数に渡されます。これは、関数内のパラメーターに加えられた変更は、関数の外部の元の値に影響を与えないことを意味します。

構文:

func f(x int) {
    // x is copy of the passed argument
}
ログイン後にコピー

例:

package main

import "fmt"

func main() {
    x := 10
    f(x) // Value passed
    fmt.Println(x) // Prints 10
}

func f(x int) {
    x += 10
}
ログイン後にコピー

参照渡し

# # 参照型のパラメータ (ポインタ、スラ​​イス、マップなど) が参照によって渡される場合、元の変数への参照が渡されます。これは、関数内のパラメーターに加えられた変更は、関数の外側の元の値に影響を与えることを意味します。

文法:

func f(x *int) {
    // x is a pointer to the passed arg
}
ログイン後にコピー

例:

package main

import "fmt"

func main() {
    x := 10
    f(&x) // Reference passed
    fmt.Println(x) // Prints 20
}

func f(x *int) {
    *x += 10
}
ログイン後にコピー

実用的なケース

参照による受け渡しを使用して、関数に渡される複雑なデータ構造 (スライス、マップなど) を変更できます。たとえば、次のコードはスライスを作成し、そのスライスを関数に渡して並べ替えます。

package main

import "fmt"
import "sort"

func main() {
    arr := []int{5, 2, 8, 3, 1}
    sortSlice(&arr) // Reference passed
    fmt.Println(arr) // Prints [1 2 3 5 8]
}

func sortSlice(arr *[]int) {
    sort.Ints(*arr)
}
ログイン後にコピー

結論

Go で関数パラメータがどのように渡されるかを理解するメモリを効果的に管理し、予期しない動作を回避するために重要です。適切な配信方法を選択することで、開発者はパフォーマンスを最適化し、プログラムの堅牢性を高めることができます。

以上がGolang関数パラメータ渡しメモリ管理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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