2 回答
TA贡献1802条经验 获得超4个赞
结构标签是否向 API 用户抛出错误?
不,出于很多原因。
一些结构标签(例如 json 标签)仅被包 encoding/json 用于在 JSON 对象元素和结构字段之间进行映射)。
某些 3rd 方包使用其他结构标记(如验证),如果您不使用该包,则什么也不会发生。
Go(语言及其标准库)“没有魔法”。没有什么神奇的事情发生。如果您需要在 API 端点上进行验证,您可以使用检查结构标签的验证包,但这不会神奇地发生:您必须调用这些函数并自己返回 API 错误。不,我不会在这里推荐一个框架。
要工作,struct 标签必须是有效的,你的都不是。跑去
go vet
找这类问题。(应该json:"emal" validate:"required"
甚至可能是“电子邮件”)Go 中的错误根本不会“抛出”。特别是状态代码为 400 Bad Request 的 HTTP 响应不会被“抛出”。它总是有助于使术语正确)。
TA贡献1830条经验 获得超9个赞
如果通过 API 发送的 JSON 不包含Email,则将encoding/json json.Unmarshal其视为Email空字符串。
选项 A:如果空字符串无效Email,您可以在之后检查空字符串json.Unmarshal
var person Person
err := json.Unmarshal(jsonBlob, &person)
if err != nil{
return err
}
if person.Email == "" {
return errors.New("email cannon be empty"
}
选项 B:如果空字符串有效,您可以创建自定义MarshalJSON以将 JSON 解析为字符串并查找Email键。
https://pkg.go.dev/encoding/json#example-package-CustomMarshalJSON
- 2 回答
- 0 关注
- 111 浏览
添加回答
举报