Er zijn veel gevallen waarin nihilin golang wordt gebruikt. Bijvoorbeeld:
func (u *URL) Parse(ref string) (*URL, error) {
refurl, err := Parse(ref)
if err != nil {
return nil, err
}
return u.ResolveReference(refurl), nil
}
maar we kunnen het niet zo gebruiken:
var str string //or var str int
str = nil
de golang-compiler geeft een can't use nil as type string in assignment
-fout.
Het lijkt erop dat nil
alleen kan worden gebruikt voor een aanwijzer van struct en interface. Als dat het geval is, wat betekent het dan?
en wanneer we het gebruiken om te vergelijken met het andere object, hoe vergelijken ze dat, met andere woorden, hoe bepaalt golang dat één object nul is?
EDIT:Als een interface bijvoorbeeld nul is, moeten het type en de waarde tegelijkertijd nul zijn. Hoe doet golang dit?
Antwoord 1, autoriteit 100%
In Go is nil
de nulwaarde voor pointers, interfaces, kaarten, segmenten, kanalen en functietypes, wat een niet-geïnitialiseerdewaarde vertegenwoordigt .
nil
betekent niet een of andere “ongedefinieerde” staat, het is op zich een goede waarde. Een object in Go is nil
gewoon als en alleen als de waarde nil
is, wat alleen kan als het van een van de bovengenoemde typen is.
Een error
is een interface, dus nil
is een geldige waarde voor één, in tegenstelling tot een string
. Om voor de hand liggende redenen vertegenwoordigt een nil
-fout geen fout.
Antwoord 2, autoriteit 6%
nil
in Go is gewoon de NULL
pointerwaarde van andere talen.
Je kunt het effectief gebruiken in plaats van elke aanwijzer of interface (interfaces zijn enigszins aanwijzers).
Je kunt het als een fout gebruiken, omdat het fouttype een interface is.
Je kunt het niet als tekenreeks gebruiken, want in Go is een tekenreeks een waarde.
nil
is niet getypt in Go, wat betekent dat je dat niet kunt doen:
var n = nil
Omdat je hier een type mist voor n
. U kunt echter wel
var n *Foo = nil
Merk op dat nil
de nulwaarde is van pointers en interfaces, niet-geïnitialiseerde pointers en interfaces zullen nil
zijn.
Antwoord 3
- Voor de gegevenstypen zoals slice en pointers die “verwijzen” naar andere typen, geeft “nil” aan dat de variabele niet naar een instantie verwijst (equivalent van null-pointer in andere talen)
- Het is de nulwaarde van de variabelen van het type functies, kaarten, interfaces, kanalen en structuren
Antwoord 4
nil
is een vooraf gedeclareerde identifier in Go die nulwaardenvertegenwoordigt voor pointers, interfaces, kanalen, kaarten, segmenten en functietypes.
nil
zijnde de nulwaarde van pointers en interfaces, niet-geïnitialiseerde pointers en interfaces zullen nul zijn.
In Go kan tekenreeks niet nil
zijn. Een string komt niet in aanmerking om nil
te worden toegewezen.
a := nil // It will throw an error 'use of untyped nil'
var a *int = nil //It will work
Antwoord 5
nihilis ook een waarde, maar het enige verschil is: het is leeg.
In Javascript is de niet-geïnitialiseerde variabele undefined. Op dezelfde manier heeft Golang nihilals standaardwaarde voor alle niet-geïnitaliseerde gegevenstypen.
Antwoord 6
In Go nil
is een vooraf gedeclareerde identifier die niets vertegenwoordigt voor pointers, interfaces, kanalen, kaarten, segmenten en functietypes. Niet-geïnitialiseerde pointers en interfaces zijn nil
. Een string komt niet in aanmerking voor een van de bovengenoemde typen en kan daarom niet worden toegewezen aan nil
.
Als u een variabele declareert met een verkorte decleratie zoals deze: variable:=nil
, geeft dit een compileerfout omdat de compiler geen idee heeft welk type het moet toewijzen aan variable
.
In Go-kaart ondersteunen slice en functie geen vergelijking, maar kunnen ze worden vergeleken met nil
.
Als er twee kaarten, segmenten of functies worden toegewezen aan nil
en met elkaar worden vergeleken, zal dit een runtime-fout veroorzaken.
Maar als we nil
toewijzen aan twee willekeurige pointervariabelen en ze met elkaar vergelijken, zal er geen fout optreden.
package main
import (
"fmt"
)
func main() {
var i *int =nil
var j *int =nil
if i==j {
fmt.Println("equal")
} else {
fmt.Println("no")
}
}
Deze code werkt prima en drukt de uitvoer af als equal
.
Antwoord 7
nihilin Go betekent een waarde van nul voor pointers, interfaces, kaarten, segmenten en kanalen.
Dit betekent dat de waarde niet is geïnitialiseerd
Antwoord 8
In Golang kan datatype nul-aanwijzers, interfaces, kaarten, segmenten, kanalen, functietypes en fouten gebruiken
in Stringwaarde is “”
in INTwaarde is NUL