`nil([]int)` は `nil` と等しいのに、`nil(interface{})` は等しくないのはなぜですか?

Patricia Arquette
リリース: 2024-11-03 07:20:03
オリジナル
653 人が閲覧しました

Why Does `nil([]int)` Equal `nil`, But `nil(interface{})` Doesn't?

Nil スライスと Nil インターフェイス

Go では、nil スライスは nil インターフェイスと同じではありません。この動作は、次のコードで示されています。

<code class="go">package main

import "fmt"

func main() {
    var i []int = nil
    yes(i) // output: true
    no(i)  // output: false
}

func yes(thing []int) {
    fmt.Println(thing == nil)
}

func no(thing interface{}) {
    fmt.Println(thing == nil)
}</code>
ログイン後にコピー

2 つの関数間の出力の違いは、Go がインターフェイス型を処理する方法によるものです。

インターフェイス型

Go のインターフェイス型は、特定の値型によって実装できるメソッドのコレクションです。 Interface{} 変数を使用すると、インターフェイスを実装する任意の型の任意の値を保持できます。

Nil Interface

interface{} 変数が割り当てられている場合nil に設定すると、インターフェースのデータフィールドは nil に設定されますが、type フィールドは nil に設定されません。結果として、nil インターフェースは nil と等しくありません。

Nil スライス

一方、nil スライスは単に要素を持たないスライスです。 nil スライスを nil と比較すると、スライスのデータ フィールドと型フィールドの両方が nil に設定されているため、比較は true と評価されます。

結論

したがって、コード例の 2 つの関数間の出力の違いは、nil([]int) が nil スライスであるのに対し、nil(interface{}) が nil インターフェイスであるという事実によるものです。 nil スライスは nil と比較すると true と評価されますが、nil インターフェイスは false と評価されます。

以上が`nil([]int)` は `nil` と等しいのに、`nil(interface{})` は等しくないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!