ヌル ポインタ オブジェクトをインターフェイスに割り当てる場合 (推奨学習: go)
var pi *int = nil var i interface{} i = pi fmt.Println(i == nil) // 结果为 false
これは、 case i = pi なので、i に nil を代入する代わりに、i がオブジェクト pi を指すため、理解するのが困難です。
インターフェイス内のポインターが null かどうかを判断する
そこで、ここでの問題は、インターフェイス内のポインターが null であるかどうかを判断する方法です。ヌル?
型がわかっていれば、自然に型アサーションを使用して、それが空であると判断できます。たとえば、ai, ok := i.(*int) の場合、ai == nil と判断します。
ポインタの種類がわからないので、リフレクション vi :=reflect.ValueOf(i) を使用して、vi.IsNil() を使用して判断する必要があります。ただし、i がポインターではない場合、IsNil を呼び出すときに例外が発生します。null を検出するには、このような関数を記述する必要があるかもしれません
func IsNil(i interface{}) bool { defer func() { recover() }() vi := reflect.ValueOf(i) return vi.IsNil()}
しかし、このように遅延回復を強制するのは、実際には見栄えがよくありませんなので型判定を使っています。こんな感じになりました
func IsNil(i interface{}) bool { vi := reflect.ValueOf(i) if vi.Kind() == reflect.Ptr { return vi.IsNil() } return false }
以上がgolangでnullポインタを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。