ホームページ > バックエンド開発 > Golang > Go で関数型変数を使用して型アサーションを実行する方法は?

Go で関数型変数を使用して型アサーションを実行する方法は?

DDD
リリース: 2024-11-02 18:04:28
オリジナル
961 人が閲覧しました

How to Perform Type Assertion with Function Type Variables in Go?

関数の型変数を使用した型アサーション

この質問は、型変数を関数に渡すことによって型アサーションを実行する方法を理解することを目的としています。目標は、次のようなことを達成することです:

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート