亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

結構標簽是否向 API 用戶拋出錯誤?

結構標簽是否向 API 用戶拋出錯誤?

Go
Helenr 2022-12-05 17:15:07
type Person struct {  Id       string  Roll_no  int  Email    string  `json:"email" validate:"required"`}這里的電子郵件是必需的。如果用戶沒有在 API 調用的請求正文中提供該字段,Go 是否會自動處理名稱驗證并在未提供此字段時拋出錯誤?或者我需要在我的代碼中手動驗證它并以某種形式的 http 狀態代碼拋出錯誤?
查看完整描述

2 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

結構標簽是否向 API 用戶拋出錯誤?

不,出于很多原因。

  1. 一些結構標簽(例如 json 標簽)僅被包 encoding/json 用于在 JSON 對象元素和結構字段之間進行映射)。

  2. 某些 3rd 方包使用其他結構標記(如驗證),如果您不使用該包,則什么也不會發生。

  3. Go(語言及其標準庫)“沒有魔法”。沒有什么神奇的事情發生。如果您需要在 API 端點上進行驗證,您可以使用檢查結構標簽的驗證包,但這不會神奇地發生:您必須調用這些函數并自己返回 API 錯誤。不,我不會在這里推薦一個框架。

  4. 要工作,struct 標簽必須是有效的,你的都不是。跑去go vet找這類問題。(應該json:"emal" validate:"required"甚至可能是“電子郵件”)

  5. Go 中的錯誤根本不會“拋出”。特別是狀態代碼為 400 Bad Request 的 HTTP 響應不會被“拋出”。它總是有助于使術語正確)。


查看完整回答
反對 回復 2022-12-05
?
慕標琳琳

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


查看完整回答
反對 回復 2022-12-05
  • 2 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號