У меня есть структура (с 1 полем, для упрощения), для которой данные поступают из другой функции.
Далее, для поля структуры я поставил binding: "required" , так как мне нужно, чтобы он был не пустым / существующим.
Код:
package main
import (
"fmt"
"encoding/json"
)
type Config struct {
Name string `yaml:"name" json:"name" binding:"required"`
}
func main() {
var myConfig Config
var rawConfig = []byte(`{}`) // Empty, Nothing getting passed.
err := json.Unmarshal(rawConfig, &myConfig)
if err != nil {
panic(err)
}
fmt.Printf("Name = %s\n", myConfig.Name)
}
Когда я запускаю это, даже если значение имени не было передано, оно проходит.
Вывод:
Name =
Go детская площадка Кодовая ссылка: https://play.golang.org/p/zA6nij9vTvY
Я хочу добиться следующего:
- Как я ожидаю Поле «Имя» должно присутствовать, что мне делать, чтобы оно не сработало, если оно отсутствует. Разве не ожидается, что unmarshalling будет использовать привязку = обязательный тег и потерпит неудачу?
- Иначе, каков наилучший подход, чтобы выяснить, если обязательное поле отсутствует, чтобы мы потерпели неудачу?
- Или это грубая ошибка? способ итерации по полям, и выяснить, если пусто, единственный способ?