结构标签是否向 API 用户抛出错误?

type Person struct {

  Id       string

  Roll_no  int

  Email    string  `json:"email" validate:"required"`

}

这里的电子邮件是必需的。如果用户没有在 API 调用的请求正文中提供该字段,Go 是否会自动处理名称验证并在未提供此字段时抛出错误?或者我需要在我的代码中手动验证它并以某种形式的 http 状态代码抛出错误?


Helenr
浏览 114回答 2
2回答

慕虎7371278

结构标签是否向 API 用户抛出错误?不,出于很多原因。一些结构标签(例如 json 标签)仅被包 encoding/json 用于在 JSON 对象元素和结构字段之间进行映射)。某些 3rd 方包使用其他结构标记(如验证),如果您不使用该包,则什么也不会发生。Go(语言及其标准库)“没有魔法”。没有什么神奇的事情发生。如果您需要在 API 端点上进行验证,您可以使用检查结构标签的验证包,但这不会神奇地发生:您必须调用这些函数并自己返回 API 错误。不,我不会在这里推荐一个框架。要工作,struct 标签必须是有效的,你的都不是。跑去go vet找这类问题。(应该json:"emal" validate:"required"甚至可能是“电子邮件”)Go 中的错误根本不会“抛出”。特别是状态代码为 400 Bad Request 的 HTTP 响应不会被“抛出”。它总是有助于使术语正确)。

慕标琳琳

如果通过 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go