ok
только сообщает, находится ли ключ на карте, является ли значение, связанное с ним, nil
(или вообще нулевым значением типа значения) или нет, это другое.
См. Этот пример:
answers := map[string]interface{}{
"isnil": nil,
"notnil": 1.15,
}
if v, ok := answers["isnil"]; ok {
fmt.Printf("Value: %v, type: %T\n", v, v)
}
if v, ok := answers["notnil"]; ok {
fmt.Printf("Value: %v, type: %T\n", v, v)
}
Вывод (попробуйте на Go Playground ):
Value: <nil>, type: <nil>
Value: 1.15, type: float64
Если answers
является результатом немаршалинга JSON, тогда значение, связанное с ключом в нем, будет nil
, если значение в источнике - JSON null
.
См. этот пример:
var m map[string]interface{}
err := json.Unmarshal([]byte(`{"isnil":null,"notnil":1.15}`), &m)
if err != nil {
panic(err)
}
fmt.Println(m)
Вывод (попробуйтена игровой площадке Go ):
map[notnil:1.15 isnil:<nil>]