関数パラメータの受け渡しでは、値型パラメータは値によって渡され、元の値に影響を与えることなくコピーが作成されます。参照型パラメータは参照によって渡され、変更は元の値に影響し、複雑なデータ構造を変更するために使用されます。
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 サイトの他の関連記事を参照してください。