Wat betekent nul in golang?

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 nilalleen 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 nilde nulwaarde voor pointers, interfaces, kaarten, segmenten, kanalen en functietypes, wat een niet-geïnitialiseerdewaarde vertegenwoordigt .

nilbetekent niet een of andere “ongedefinieerde” staat, het is op zich een goede waarde. Een object in Go is nilgewoon als en alleen als de waarde nilis, wat alleen kan als het van een van de bovengenoemde typen is.

Een erroris een interface, dus nilis 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%

nilin Go is gewoon de NULLpointerwaarde 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.

nilis 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 nilde nulwaarde is van pointers en interfaces, niet-geïnitialiseerde pointers en interfaces zullen nilzijn.


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

nilis een vooraf gedeclareerde identifier in Go die nulwaardenvertegenwoordigt voor pointers, interfaces, kanalen, kaarten, segmenten en functietypes.
nilzijnde de nulwaarde van pointers en interfaces, niet-geïnitialiseerde pointers en interfaces zullen nul zijn.

In Go kan tekenreeks niet nilzijn. Een string komt niet in aanmerking om nilte 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 nilis 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 nilen met elkaar worden vergeleken, zal dit een runtime-fout veroorzaken.
Maar als we niltoewijzen 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

Other episodes