ホームページ >バックエンド開発 >Golang >Go 関数をパラメータとして渡すことはできますか?

Go 関数をパラメータとして渡すことはできますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-03 19:55:10597ブラウズ

Can Go Functions Be Passed as Parameters?

Go では関数をパラメータとして渡すことができますか?

Java では、匿名の内部クラスを使用して関数をパラメータとして渡すことができます。 Go は、この機能を容易にする同様のメカニズムを提供していますか?

答え:

もちろんです! Go は、匿名関数とクロージャを介して関数をパラメータとして渡すことをサポートしています。以下にいくつかの例を示します。

例 1:

package main

import "fmt"

type convert func(int) string

func value(x int) string {
    return fmt.Sprintf("%v", x)
}

func quote123(fn convert) string {
    return fmt.Sprintf("%q", fn(123))
}

func main() {
    result := quote123(value)
    fmt.Println(result) // Output: "123"
}

この例では、convert 関数の型は整数を受け取り文字列を返すように定義されています。 value 関数は、入力整数の文字列表現を返すことにより、convert を実装します。 quote123 関数は、convert 関数を引数として受け取り、値 123 で関数を呼び出した結果を引用符で囲まれた文字列表現で返します。

例 2:

package main

import "fmt"

func main() {
    result := quote123(func(x int) string { return fmt.Sprintf("%b", x) })
    fmt.Println(result) // Output: "1111011"
}

ここでは、匿名関数が引数として quote123 関数に渡されています。匿名関数は、入力整数をバイナリ文字列表現に変換します。

例 3:

package main

import "fmt"

func main() {
    foo := func(x int) string { return "foo" }
    result := quote123(foo)
    fmt.Println(result) // Output: "foo"
}

この場合、名前付き関数 foo は次のように渡されます。 quote123 への引数。 foo 関数は、入力に対して文字列「foo」を返すだけです。

これらの例は、Go で関数をパラメータとして渡す柔軟性と機能を示し、汎用的で再利用可能なコードを作成できるようにします。

以上がGo 関数をパラメータとして渡すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。