Go のパラメーター化関数を理解する
Go では、関数をパラメーターとして渡すと、言語の型システムによる特定の制約が導入されます。この記事では、特定のデータ型を受け入れる関数をデコレーターに渡す際の制限と潜在的な解決策について説明します。
Go での関数の装飾
次のようなデコレーター関数の例を考えてみましょう。既存の関数をラップします。簡単にするために、これらの関数は単一の値を受け取り、返します。デコレータは func(interface{}) インターフェイスの型引数を受け入れることができます。これは、funcA などのインターフェイスを受け入れたり返したりする関数とうまく連携します。
型変換のジレンマ
ただしそうすると、文字列を受け入れて文字列を返す funcB のような関数を func(interface{}) に変換できるかという疑問が生じます。インターフェースのタイプ?{}答えは「いいえ」です。
説明
Go では、パラメーターを渡すときに関数のシグネチャを照合する必要があります。引数として文字列を期待する関数は、明示的な型キャストなしではインターフェイスを受け入れません。{} Interface{} 引数では幅広い値を使用できますが、文字列などの特定の型には自動的に変換されません。
解決策: アダプタ関数
これをブリッジするにはギャップの場合、入力文字列をインターフェースに変換して funcB を呼び出すアダプター関数を導入できます。{}このアダプター関数は、期待される型に準拠しているため、デコレーター関数に渡すことができます。
結論
ただし、任意の関数を汎用関数に変換することは不可能です。 Go でジェネリックスを使用しない (interface{}) インターフェイス{} タイプの場合、アダプター関数を使用すると回避策が提供されます。このアプローチにより、非インターフェイス関数をデコレータにシームレスに統合し、その機能を強化できるようになります。
以上がGo デコレーターはジェネリックなしで特定のデータ型の関数を処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。