Go 言語では、クロージャはパラメータ値または参照を渡すことができます。値を渡すと、クロージャ内に値のコピーが作成され、そのコピーに対する変更はクロージャ内でのみ有効で、元のパラメータには影響しません。参照を渡すと、クロージャ内のパラメータへのポインタが作成され、そのポインタが変更されます。元のパラメータを更新します。パラメーターが値によって渡される場合、元のパラメーターの値は変更されませんが、パラメーターが参照によって渡される場合、元のパラメーターの値は変更されます。
#Go 関数クロージャでのパラメータの受け渡し
はじめに
Go の中で言語では、クロージャは、そのスコープにその作成関数のスコープが含まれる関数です。これにより、クロージャは、作成関数が戻った後でも、作成関数で宣言された変数にアクセスして変更できるようになります。パラメータの受け渡し
クロージャでパラメータを渡すときは、渡されるパラメータが値であるか参照であるかを考慮する必要があります。実践例
次の例は、クロージャを使用してパラメータを渡し、外部変数を変更する方法を示しています。package main import "fmt" func main() { // 声明一个外层函数并传递一个值 counter := func(num int) { num++ // 对参数的值进行修改 fmt.Println("Value in closure:", num) } // 调用外层函数,传递一个值 num := 10 counter(num) fmt.Println("Value outside closure:", num) // 值不会改变 }出力:
Value in closure: 11 Value outside closure: 10この例では、
counter は
num の値を変更するクロージャです。ただし、
num は値によって渡されるため、
num への変更はクロージャに限定されますが、外部変数
num は変更されません。
参照渡し
パラメーターを参照渡しするには、ポインターを使用できます:package main import "fmt" func main() { // 声明一个外层函数并传递一个引用 counter := func(num *int) { *num++ // 对指针所指向的值进行修改 fmt.Println("Value in closure:", *num) } // 调用外层函数,传递一个引用 num := 10 counter(&num) fmt.Println("Value outside closure:", num) // 值会改变 }出力:
Value in closure: 11 Value outside closure: 11この例では、たとえば、
num はポインターを介して渡されるため、クロージャーは外部変数
num の値を変更できます。
以上がgolang 関数クロージャパラメータの受け渡しの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。