Zoeken…


Uitleg

Nulwaarden of nulinitialisatie zijn eenvoudig te implementeren. Afkomstig van talen als Java kan het ingewikkeld lijken dat sommige waarden nil kunnen zijn en andere niet. Samengevat uit Zero Value: The Go Programming Language Specification :

Aanwijzers, functies, interfaces, segmenten, kanalen en kaarten zijn de enige typen die nul kunnen zijn. De rest wordt geïnitialiseerd op valse, nul of lege tekenreeksen op basis van hun respectieve typen.

Als een functie een bepaalde toestand controleert, kunnen er problemen optreden:

func isAlive() bool {
    //Not implemented yet
    return false
}

De nulwaarde zal zelfs vóór implementatie onwaar zijn. Unit tests afhankelijk van de terugkeer van deze functie kunnen valse positieven / negatieven geven.

Een typische oplossing is om ook een fout te retourneren, wat idiomatisch is in Go:

package main

import "fmt"

func isAlive() (bool, error) {
    //Not implemented yet
    return false, fmt.Errorf("Not implemented yet")
}

func main() {
    _, err := isAlive()
    if err != nil {
        fmt.Printf("ERR: %s\n", err.Error())
    }
    
}

speel het op speelplaats

Bij het retourneren van zowel een struct als een fout heeft u een gebruikersstructuur nodig voor het retourneren, die niet erg elegant is. Er zijn twee tegenopties:

  • Werken met interfaces: Retourneer nul door een interface te retourneren.
  • Werken met verwijzingen: een aanwijzer kan nil

De volgende code retourneert bijvoorbeeld een pointer:

func(d *DB) GetUser(id uint64) (*User, error) {
    //Some error ocurred
    return nil, err
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow