golangでnullポインタを確認する方法

(*-*)浩
リリース: 2019-12-31 14:35:32
オリジナル
7818 人が閲覧しました

golangでnullポインタを確認する方法

ヌル ポインタ オブジェクトをインターフェイスに割り当てる場合 (推奨学習: 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 サイトの他の関連記事を参照してください。

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