Golang のゼロ値 Nil
Jay Singh
2023年6月20日
Go
Go Identifier
nilは Go プログラミング言語のゼロ値であり、よく知られた重要な事前定義された識別子です。 これは、いくつかの異なるタイプのゼロ値のリテラル表現です。
他の一般的な言語で働いたことのある初心者の Go プログラマーの多くは、nil を他の言語の null (または NULL) と同等と考えるかもしれません。 これは部分的に正しいですが、Go の nil と他の言語の null (または NULL) にはいくつかの違いがあります。
Golang で nil が何を意味するかを確認するために、いくつかの例を見ていきます。
Golang でさまざまな型の nil のサイズを確認する
すべての型の値のメモリ レイアウトは常に同じです。 型の nil 値は例外ではありません (ゼロ値を nil と仮定します)。
nil 値のサイズは、nil 値と同じ型の non-nil 値のサイズと常に同じです。 ただし、さまざまな型の nil 値のサイズは異なる場合があります。
コード:
package main
import (
"fmt"
"unsafe"
)
func main() {
var p *struct{} = nil
fmt.Println(unsafe.Sizeof(p))
var s []int = nil
fmt.Println(unsafe.Sizeof(s))
var m map[int]bool = nil
fmt.Println(unsafe.Sizeof(m))
var c chan string = nil
fmt.Println(unsafe.Sizeof(c))
var f func() = nil
fmt.Println(unsafe.Sizeof(f))
var i interface{} = nil
fmt.Println(unsafe.Sizeof(i))
}
出力:
8
24
8
8
8
16
Golang で nil 文字列を返す
文字列値を参照するポインタ変数の型は string です。 ポインターのゼロ値は nil です。
コード:
package main
import (
"fmt"
)
func main() {
var data *string = nil
if data == nil {
fmt.Println(data)
}
}
出力:
<nil>
この次の例では、Golang で nil == nil かどうかを確認します。
コード:
package main
import (
"fmt"
)
func main() {
var i *int = nil
var j *int = nil
if i == j {
fmt.Println("equal")
} else {
fmt.Println("no")
}
}
出力:
equal
チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe