Golang では、nil 値をインターフェイス型に直接割り当てることはできません。これは、インターフェイスが値へのポインタを表すことを目的としているのに対し、nil は値が存在しないことを表すためです。 nil 値をインターフェース引数に渡そうとすると、プログラムは引数が nil かどうかをチェックし、エラーを返したり予期しない動作をする可能性があります。
この問題を回避するには、リフレクションを使用して nil を作成できます。インターフェイス引数に渡して nil チェックに渡すことができる値。リフレクションを使用すると、変数の基になる型と値にプログラムでアクセスできます。
解決策:
式を使用します。reflect.TypeOf((*error)(nil)).Elem () を使用して、インターフェイス エラーの Reflect.Type を取得します。この式は、正しいreflect.Typeを取得するために、非インターフェイス値*errorを使用します。その後、結果に対して Elem が呼び出され、エラーのreflect.Typeが取得されます。
nilArgを作成するには、次の式を使用します:
nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
この式は、型のnil値を作成します。エラー。元の問題は、nil インターフェース値の具体的な型が nil であるため、reflect.TypeOf((error)(nil)) が nil を返したために発生しました。
例:
func main() { rf := reflect.ValueOf(f) nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem()) rf.Call([]reflect.Value{nilArg}) }
この解決策により、f 関数が nil 値を受け取り、== nil チェックに合格できるようになります。
以上がGo のリフレクションはインターフェイス引数に nil 値を渡すことをどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。