関数の型変数を使用した型アサーション
この質問は、型変数を関数に渡すことによって型アサーションを実行する方法を理解することを目的としています。目標は、次のようなことを達成することです:
// Pseudocode func myfunction(mystring string, mytype Type) { ... someInterface := translate(mystring) object, ok := someInterface.(mytype) ... // Do other stuff } func main() { // Desired function call myfunction("hello world", map[string]string) }
型アサーションの適切な関数宣言
指定された関数で型アサーションを実行するには、適切な関数宣言では、型パラメータにinterface{}を使用する必要があります。これは、Go のインターフェイスが任意の型値を保持できるためです。関数宣言の修正バージョンは次のとおりです。
func myfunction(v interface{}, expectedType interface{}) bool { return reflect.TypeOf(v) == reflect.TypeOf(expectedType) }
Main 関数での使用法
main 関数では、サンプルを渡すことで myfunction を呼び出すことができます。型自体ではなく、目的の型の値:
assertNoMatch := myfunction("hello world", map[string]string{}) assertMatch := myfunction("hello world", "stringSample") fmt.Printf("%+v\n", assertNoMatch) // false fmt.Printf("%+v\n", assertMatch) // true
アプローチの説明
このアプローチでは、reflect パッケージを使用して実際の値の型を比較します (v ) 期待されるタイプ (expectedType) のサンプル値。これにより、switch ステートメントを使用して mystring の型をチェックし、それを目的の型に明示的にキャストするのと同じように、動的な型チェックを実行できます。
以上がGo で関数型変数を使用して型アサーションを実行する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。