ホームページ > バックエンド開発 > Golang > Go Reflection を使用して Nil インターフェイス値を安全に渡すにはどうすればよいですか?

Go Reflection を使用して Nil インターフェイス値を安全に渡すにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-23 09:44:24
オリジナル
663 人が閲覧しました

How Can I Safely Pass Nil Interface Values Using Go Reflection?

リフレクションを介してインターフェイスとして nil 値を渡す

インターフェイスにリフレクションすると、nil 値を効果的に渡すという課題が生じます。次の関数を考えてみましょう:

func f(e error) {
    if e == nil {
        fmt.Println("YEY! NIL") // Aim for this
    } else {
        fmt.Println("NOT NIL :(")
    }
}
ログイン後にコピー

以下のコードを使用してリフレクション経由で関数に nil 値を渡そうとすると、パニックが発生します:

nilArg := reflect.Zero(reflect.TypeOf((error)(nil)))
ログイン後にコピー

Don'絶望するな!この問題を回避するには、式reflect.TypeOf((*error)(nil)).Elem()を利用して、インターフェイスエラーのreflect.Typeを取得します。このトリックには、非インターフェイス値をreflect.TypeOf()に渡し、reflect.Elem()を使用して目的の型を導出することが含まれます。

nilArg構造の場合、次を使用します:

nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
ログイン後にコピー

理解を確実にするために、実際に動作するプレイグラウンドの例をお楽しみください。

以上がGo Reflection を使用して Nil インターフェイス値を安全に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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