Go 言語は、関数値を動的に作成および破棄するための func 型を提供します。 作成: func キーワードを使用して、関数型を動的に作成します (f := func(x int) int { return x * x } など)。 Call: call(f, 5) など、関数値をパラメータとして別の関数に渡します。破棄: 関数の値は、変数と同様に、スコープの外に出ると破棄されます。
Go 言語には、組み込みの func
型が用意されており、これにより、関数値を作成して使用します。
func
キーワードを使用して関数タイプを動的に作成できます:
f := func(x int) int { return x * x }
上記のコードは関数タイプを作成します整数の引数を受け取り、整数を返します。
関数値をパラメータとして別の関数に渡すことで、関数値を呼び出すことができます:
func call(f func(int) int, x int) { fmt.Println(f(x)) } call(f, 5)
関数値変数と同じライフサイクルを持ち、スコープ外に出ると破棄されます。
結果を処理するために goroutine 内にコールバック関数を作成するのは一般的なシナリオです:
func main() { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() resultCh := make(chan int) // 创建回调函数 f := func(result int) { resultCh <- result } go func() { // 模拟耗时的处理 time.Sleep(5 * time.Second) result := 42 f(result) }() select { case result := <-resultCh: fmt.Println("Received result:", result) case <-ctx.Done(): fmt.Println("Timed out waiting for result") } }
この例では、動的に作成されたコールバック関数 f
は、ゴルーチンの処理完了後にメインのゴルーチンに結果を通知するために使用されます。
以上がgolang関数型の動的作成・破棄メカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。