Go で関数ラッパーを作成して、関数の実行前後にコードを挿入するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-21 18:27:14
オリジナル
773 人が閲覧しました

How Can I Create Function Wrappers in Go to Inject Code Before and After Function Execution?

Go の関数ラッパー

Go では、関数を入力として受け取り、そのラップされたバージョンを返す関数ラッパーを作成できます。これにより、ラップされた関数の実行の前後にコードを挿入できます。

関数ラッパーを定義するには、ラップする関数のシグネチャを指定する必要があります。以下に例を示します。

func funcWrapper(myFunc interface{}) {
    fmt.Println("Before")
    //call myFunc
    fmt.Println("After")
}
ログイン後にコピー

この例では、関数ラッパーは入力としてタイプ インターフェイス{}の変数を受け取り、異なるシグネチャの関数を受け入れることができます。ラップされた関数が呼び出されると、関数呼び出しの前後のコードが実行されます。

ただし、この方法では、ラップする関数のシグネチャを指定する必要があります。より柔軟な解決策は、任意のシグネチャの関数を受け入れることができる関数リテラルを使用することです。

func wrap(f func(i int) int) func(i int) int {
    return func(i int) (ret int) {
        fmt.Println("Before, i =", i)
        ret = f(i)
        fmt.Println("After, ret =", ret)
        return
    }
}
ログイン後にコピー

このラッパー関数は、入力として int を受け取り、int を返す関数を受け取ります。次に、ラップされた関数が呼び出される前後にコードを実行する新しい関数を返します。

ラッパーを使用するには、ラップする関数を引数として渡します。

wf := wrap(myfunc)
ret := wf(2)
fmt.Println("Returned:", ret)
ログイン後にコピー

この例では、myfunc 関数をラップし、ラップされた関数の入力値と戻り値を出力します。

Go では、さまざまな関数タイプに個別のラッパー関数を作成して、タイプの安全性と使いやすさを確保します。

以上がGo で関数ラッパーを作成して、関数の実行前後にコードを挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート