Я использую Bee go для разработки веб-сервера.
Я использовал beego.Controller
для обработки запросов POST. В моем случае запрос POST содержит JSON:
{
"name": "titi",
"password": "123456"
}
Вот мой код:
type TestController struct {
beego.Controller
}
type User struct {
Name string `json:"name"`
Password string `json:"password"`
}
func (c *TestController) Post() {
var ob md.User
var err error
if err = json.Unmarshal(c.Ctx.Input.RequestBody, &ob); err == nil {
logs.Debug(ob.Name)
logs.Debug(len(ob.Name))
} else {
logs.Error("illegal JSON")
}
}
Этот фрагмент кода работает нормально. С помощью тегов структуры User
, "name"
присваивается ob.Name
, а "password"
присваивается ob.Password
.
Теперь я хочу протестировать некоторые исключения. Например, что, если запрос JSON не содержит ожидаемых ключей:
{
"illegalKey1": "titi",
"illegalKey2": "123456"
}
Как видите, я ожидаю "name"
и "password"
, но теперь ключи становятся "illegalKey1"
и "illegalKey2"
. Поэтому я думаю, что это может вызвать некоторые ошибки.
К моему удивлению, ошибки нет, потому что err == nil
по-прежнему верно, а len(ob.Name)
просто теперь становится 0.
Итак, есть ли какой-нибудь хороший способ обработать этот случай в Go / Bee go?
Я имею в виду, я знаю, что
if len(ob.Name) == 0 {
logs.Error("illegal JSON")
}
в порядке, но мне интересно, есть ли какие-то какой код более красивый? В противном случае, если в JSON 10 полей, я должен сделать такое if
10 раз. Очевидно, это совсем нехорошо.