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 サイトの他の関連記事を参照してください。