型アサーションを実行する際に、特定の型を関数に渡そうとします。具体的には、以下の仮説関数に示すように、指定された型と確実に一致できる関数宣言を実現することを目指します。
// Note: Type isn't a valid type to use in Go func myfunction(mystring string, mytype Type) { ... someInterface := translate(mystring) object, ok := someInterface.(mytype) ... // Do other stuff }
myfunction 内で型アサーションを正常に実装するには、関数を変更する必要があります。 mytype の Interface{} パラメータを受け入れる宣言。{}これを実現する方法は次のとおりです。
func myfunction(v interface{}, mytype interface{}) bool { return reflect.TypeOf(v) == reflect.TypeOf(mytype) }
このアプローチでは、reflect パッケージを利用して、v パラメーターの型を提供された mytype インターフェイスと比較します。型が一致するかどうかを示すブール値を返します。
この関数の利用方法を示す例を次に示します。
package main import ( "fmt" "reflect" ) func main() { assertNoMatch := myfunction("hello world", map[string]string{}) fmt.Printf("%+v\n", assertNoMatch) assertMatch := myfunction("hello world", "stringSample") fmt.Printf("%+v\n", assertMatch) }
この例では、myfunction は、タイプが一致するかどうかを正しく判断します。指定された値は指定された型と一致し、それに応じてブール値を返します。
以上がGoで関数パラメータを使用して型アサーションを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。