Значением по умолчанию для структуры является нулевое значение для каждого поля, которое различается в зависимости от его типа.
Когда для переменной выделено хранилище, либо через объявление, либо через вызов new,или когда создается новое значение, с помощью составного литерала или вызова make, и не предоставляется явная инициализация, переменной или значению присваивается значение по умолчанию.Каждый элемент такой переменной или значения устанавливается в нулевое значение для его типа: false для логических значений, 0 для числовых типов, «» для строк и nil для указателей, функций, интерфейсов, слайсов, каналов и карт.Эта инициализация выполняется рекурсивно, поэтому, например, каждый элемент массива структур будет обнулять свои поля, если не указано значение.
type T struct { i int; f float64; next *T }
t := new(T)
: выполняется следующее:
t.i == 0
t.f == 0.0
t.next == nil
Но для проверки значения карты на основе ключа, если он существует, вы можете использовать его как:
i, ok := m["route"]
В этом выражении первому значению (i) присваивается значение, хранящееся под ключом«маршрут».Если этот ключ не существует, i является нулевым значением типа значения (0).Второе значение (ok) - это bool, который имеет значение true, если ключ существует на карте, и false, если нет.
По вашему вопросу
Должен ли я проверять ноль или someStruct{}?
Чтобы проверить инициализированную пустую структуру, вы можете проверить someStruct{}
как:
package main
import (
"fmt"
)
type someStruct struct {
field1 int
field2 string
}
var mapping map[int]someStruct
func main() {
var some someStruct
fmt.Println(some == (someStruct{}))
//mapping := make(map[int]someStruct)
}
Перейти на игровую площадку