Go の関数ポインターとアダプター: パラメーターとして関数を渡す
提示された質問は、Go で任意の関数をパラメーターとして渡すことを中心に展開します。特定の型の関数をデコレータが受け入れられるジェネリック型に変換する機能function.
最初に、単一のパラメーターと単一の戻り値で関数をラップできるデコレーター関数が導入されます。これは、引数として func(interface{})interface{} 型の関数を受け入れ、インターフェース型で動作する関数を処理できるようにします。ただし、匿名関数を使用せずに、func(string) string などの他の特定の型の関数をデコレータ関数と互換性を持たせるにはどうすればよいかという疑問が生じます。
この質問に対する答えは、 Go の型システムの制限。 Interface{} 型のパラメータを渡すことは、必ずしも関数が任意の型を受け入れることを意味するわけではありません。代わりに、関数自体の特定の実装に依存します。たとえば、構造体を受け入れる関数はその個々のメンバーを受け取りますが、その構造体を含むインターフェイスを受け取る関数は型情報とそれへのポインターを受け取ります。
したがって、ジェネリックスを利用せずに、この適応性を実現する方法は、アダプター関数を使用することです。アダプター関数は仲介者として機能し、特定の関数型をデコレーター関数が必要とする汎用インターフェイス型に変換します。
以上が匿名関数を使用せずに、特定の型の Go 関数を汎用デコレーター関数に適応させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。