Der Nullwert Nil in Golang

Jay Singh 20 Juni 2023
  1. Überprüfen Sie die Größe von nil mit verschiedenen Typen in Golang
  2. Gibt nil String in Golang zurück
Der Nullwert Nil in Golang

nil ist ein Nullwert in der Programmiersprache Go, ein bekannter und signifikanter vordefinierter Bezeichner. Es ist die wörtliche Darstellung mehrerer verschiedener Arten von Nullwerten.

Viele unerfahrene Go-Programmierer, die in anderen populären Sprachen gearbeitet haben, betrachten nil möglicherweise als Äquivalent zu null (oder NULL) in anderen Sprachen. Dies ist teilweise richtig, aber es gibt mehrere Unterschiede zwischen nil in Go und null (oder NULL) in anderen Sprachen.

Wir werden uns einige Beispiele ansehen, um zu sehen, was nil in Golang bedeutet.

Überprüfen Sie die Größe von nil mit verschiedenen Typen in Golang

Die Speicherlayouts aller Arten von Werten sind immer gleich. Die nil-Werte des Typs sind keine Ausnahmen (nehmen Sie den Nullwert als nil an).

Die Größe eines Null-Werts ist immer dieselbe wie die Größe von Nicht-Null-Werten mit demselben Typ wie der Null-Wert. Null-Werte verschiedener Typen können jedoch unterschiedliche Größen haben.

Code:

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))
}

Ausgang:

8
24
8
8
8
16

Gibt nil String in Golang zurück

Der Zeigervariablentyp, der auf einen Stringwert verweist, ist string. Der Nullwert eines Zeigers ist nil.

Code:

package main
import (
    "fmt"
)

func main() {
    var data *string = nil
    if data == nil {
        fmt.Println(data)
    }
}

Ausgang:

<nil>

In diesem folgenden Beispiel prüfen wir, ob nil == nil in Golang ist.

Code:

package main
import (
    "fmt"
)

func main() {
    var i *int = nil
    var j *int = nil
    if i == j {
        fmt.Println("equal")
    } else {
        fmt.Println("no")
    }
}

Ausgang:

equal