Go
Нулевые значения
Поиск…
объяснение
Нулевые значения или нулевая инициализация просты в реализации. Исходя из таких языков, как Java, может показаться сложным, что некоторые значения могут быть nil
а другие - нет. В резюме из Zero Value: язык программирования Go Go Спецификация :
Указатели, функции, интерфейсы, срезы, каналы и карты являются единственными типами, которые могут быть ноль. Остальные инициализируются ложными, нулевыми или пустыми строками на основе их соответствующих типов.
Если функции, которые проверяют какое-либо условие, могут возникнуть проблемы:
func isAlive() bool {
//Not implemented yet
return false
}
Нулевое значение будет ложным еще до реализации. Единичные тесты, зависящие от возврата этой функции, могут давать ложные срабатывания / негативы.
Типичным обходным путем является также возврат ошибки, которая является идиоматической в 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())
}
}
При возврате как структуры, так и ошибки вам нужна структура User для возврата, которая не очень элегантна. Есть два варианта:
- Работа с интерфейсами: возврат nil путем возврата интерфейса.
- Работа с указателями: указатель может быть
nil
Например, следующий код возвращает указатель:
func(d *DB) GetUser(id uint64) (*User, error) {
//Some error ocurred
return nil, err
}