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())
    }
    
}

zagraj na placu zabaw

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
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow