Go
Nul waarden
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())
}
}
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
}