Go の関数のパラメータ受け渡し方法は、1) 値による受け渡し (基本的な型と構造体)、2) 参照による受け渡し (参照型とポインター)、3) 値による参照による受け渡し (ほとんど使用されません) に分類されます。 。適切な配信方法の選択は、関数のパフォーマンスとセマンティクスに影響します。
Go でのさまざまなタイプのパラメータのメソッドの受け渡し
Go では、関数のパラメータをさまざまな方法で渡すことができます。関数がこれらのパラメーターをどのように使用するかに影響します。 Go でさまざまな種類のパラメーターを渡す 3 つの一般的な方法を次に示します。
値による受け渡し
値による受け渡しは、最も簡単な受け渡し方法です。このように、関数は引数のコピーを作成するため、引数を変更しても元の値には影響しません。プリミティブ型 (int、float64、string など) と構造体は値によって渡されます。例:
func inc(n int) { // 创建参数 n 的副本 n++ } func main() { a := 5 inc(a) // a 的值保持为 5,因为 n 是 a 的副本 fmt.Println(a) // 输出:5 }
参照渡し
参照渡し ポインターによってパラメーターを渡します。関数はパラメータへのポインタを変更することで、元の値を間接的に変更できます。参照型 (スライス、マップ、関数など) は参照によって渡されます。ポインター (*int
など) も参照によって渡されます。例:
func inc(n *int) { // n 是指向原始值 a 的指针 *n++ } func main() { a := 5 inc(&a) // 修改 a 的值 fmt.Println(a) // 输出:6 }
値による参照の受け渡し
値による参照の受け渡しは一般的ではありませんが、場合によっては便利な受け渡し方法です。このようにして、関数はパラメーター値へのポインターのコピーを作成します。例:
func incValueRef(val *float64) { // val 是指向参数值 f 的指针的副本 *val++ } func main() { f := 5.0 incValueRef(&f) // 修改 f 的值 fmt.Println(f) // 输出:6.0 }
正しい受け渡し方法を選択することは、関数のパフォーマンスとセマンティクスに影響するため重要です。値渡しの方が高速ですが、参照渡しを使用すると関数で元の値を変更できます。参照渡しは、この 2 つの間の妥協点を提供します。
以上がgolangでさまざまなタイプのパラメータを渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。