Go
Zero wartości
Szukaj…
Wyjaśnienie
Zerowe wartości lub zerowa inicjalizacja są łatwe do wdrożenia. Pochodzące z języków takich jak Java może wydawać się skomplikowane, że niektóre wartości mogą być nil
a inne nie. Podsumowując od Zero Value: The Go Programming Language Specification :
Wskaźniki, funkcje, interfejsy, wycinki, kanały i mapy to jedyne typy, które mogą być zerowe. Reszta jest inicjowana na fałsz, zero lub puste łańcuchy na podstawie ich odpowiednich typów.
Jeśli funkcja, która sprawdza niektóre warunki, mogą pojawić się problemy:
func isAlive() bool {
//Not implemented yet
return false
}
Wartość zerowa będzie fałszywa nawet przed wdrożeniem. Testy jednostkowe zależne od powrotu tej funkcji mogą dawać fałszywe wyniki dodatnie / ujemne.
Typowym obejściem jest także zwrócenie błędu, który jest idiomatyczny w 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())
}
}
Zwracając zarówno strukturę, jak i błąd, potrzebujesz struktury użytkownika do zwrotu, która nie jest zbyt elegancka. Istnieją dwie opcje przeciwne:
- Praca z interfejsami: Zwróć zero, zwracając interfejs.
- Praca ze wskaźnikami: Wskaźnik może być
nil
Na przykład poniższy kod zwraca wskaźnik:
func(d *DB) GetUser(id uint64) (*User, error) {
//Some error ocurred
return nil, err
}