Go 関数のパラメータ受け渡し
Go では、関数は値または参照によってパラメータを渡します。これら 2 つの配信方法の違いを理解することは、コードのパフォーマンスを最適化し、予期しない動作を回避するために重要です。
値の受け渡し
パラメータが値によって渡されると、関数はパラメータ値のコピーを受け取ります。これは、パラメーター値を変更しても、関数外の元のパラメーターには影響を与えないことを意味します。値による受け渡しは、関数内で値が変更されても元の値が変更されないため、int、float64、string などの不変型の場合に便利です。
コード例:
package main import "fmt" func addValue(n int) { n++ } func main() { num := 10 addValue(num) fmt.Println(num) // 输出:10 }
参照渡し
パラメータが参照によって渡される場合、関数はパラメータを受け取ります。のアドレス。これは、パラメーター値への変更が関数の外側の元のパラメーターに反映されることを意味します。参照による受け渡しは、関数内の元の値を変更する必要があるため、配列、スライス、マップなどの可変型の場合に便利です。
Go で参照の受け渡しを実装するには、ポインター (*) を使用できます。ポインタは変数のアドレスへの参照です。
コード例:
package main import "fmt" func addValuePtr(n *int) { *n++ } func main() { num := 10 addValuePtr(&num) fmt.Println(num) // 输出:11 }
実践例
次の関数を考えてみましょう。数値の配列:
func sum(nums []int) int { total := 0 for _, num := range nums { total += num } return total }
値渡しを使用してこの関数に配列を渡そうとした場合、関数内の配列要素を変更しても、関数の外側の元の配列には影響しません。代わりに、関数が元の配列にアクセスしてその要素を変更できるように、参照渡しを使用する必要があります。
以上がgolang関数のパラメータ受け渡しの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。