ホームページ  >  記事  >  バックエンド開発  >  Go で関数呼び出しを引数として渡すにはどうすればよいですか?

Go で関数呼び出しを引数として渡すにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-28 18:48:02949ブラウズ

How Can I Pass Function Calls as Arguments in Go?

Go で関数呼び出しを引数として渡す

Go では、go や defer などのキーワードにはパラメーターとして関数呼び出しが必要です。このような使用法に指定された型はありませんが、さまざまなテクニックを活用して同様の結果を達成できます。

関数変数/値の使用

次のように定義できます。関数型の変数を指定し、それに関数を割り当てます。これにより、変数に格納されているかのように関数を呼び出すことができます。

<code class="go">func myFunc() {
    fmt.Println("hi")
}

func main() {
    var f func()
    f = myFunc
    f() // This calls myFunc
}</code>

関数呼び出しをパラメータでラップする

引数を伴う関数呼び出しに対応するには、次のようにします。関数内で呼び出しをラップし、ラップされた関数を渡すことができます。

<code class="go">func launch(f func()) {
    fmt.Println("Before launch")
    go func() {
        defer fmt.Println("After completion")
        f()
    }()
}</code>

次のように使用できます:

<code class="go">func main() {
    launch(func() {
        fmt.Println("Hello, playground")
    })

    time.Sleep(time.Second)
}</code>

パラメータ自動保存用のヘルパー関数

特定の関数タイプについては、パラメーターの自動保存を提供するヘルパー関数を作成できます。これらのヘルパー関数は、元の関数と同じシグネチャを持ち、パラメータのない関数を返します。

動的関数にリフレクションを使用する

リフレクションを使用すると、必要な関数を必要とせずに関数を動的に呼び出すことができます。マニュアルのコピー。ただし、他のメソッドよりも遅く、型安全性が低くなります。

メソッド値

レシーバー オブジェクトのコピーを保存するメソッド値は例外であり、自動的にパラメータの保存が可能です。メソッド値は、メソッドを直接呼び出さなくても使用できます。

Go には関数呼び出しの特定の型がありませんが、これらの技術は、引数や自動パラメーター保存など、関数呼び出しを引数として渡すさまざまな方法を提供します。

以上がGo で関数呼び出しを引数として渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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