値渡しと参照渡しの違い

Go言語では、関数の引数は値渡しとポインタ渡しで渡せます。値渡しは、引数の値を関数内の引数の値にコピーして渡す方法で、ポインタ渡しは、引数のアドレスを関数内の引数の値に渡す方法です。

値渡しでは、関数は引数の値をコピーして関数内部で演算するので、元の値には影響しません。つまり、関数内で引数の値を変更しても、関数外の変数は変化しません。

関数がポインタで渡される時、関数はパラメータのアドレスを関数のパラメータに渡され、関数内部はそのアドレスを通して元の値にアクセスしたり、変更したりします。これにより、大きなデータ構造をコピーせずに済むため、パフォーマンスが向上します。関数がポインタで参照する値に対する変更は、関数外部の変数に影響を与えます。

値渡しと参照渡しの違いを示すサンプルコードを次に示します。

package main

import "fmt"

func valuePass(num int) {
    num = 10
}

func pointerPass(num *int) {
    *num = 10
}

func main() {
    num := 5

    valuePass(num)
    fmt.Println("Value Pass:", num) // 输出 5

    pointerPass(&num)
    fmt.Println("Pointer Pass:", num) // 输出 10
}

上記の例では、valuePass 関数は値渡しで、pointerPass 関数はポインタ渡しを使用しています。値渡しの valuePass 関数は num の値を変更できませんが、ポインタ渡しの pointerPass 関数は num の値を変更できます。

bannerAds