go-zero針對文本的序列化和反序列化主要在三個地方使用git
完整示例可參照下面這篇文章:github
在反序列化的過程當中的針對請求數據的數據格式
以及數據校驗
需求,go-zero實現了本身的一套反序列化機制json
數據格式
以訂單order.api文件爲例type ( createOrderReq struct { token string `path:"token"` // 用戶token productId string `json:"productId"` // 商品ID num int `json:"num"` // 商品數量 } createOrderRes struct { success bool `json:"success"` // 是否成功 } findOrderReq struct { token string `path:"token"` // 用戶token page int `form:"page"` // 頁數 pageSize int8 `form:"pageSize"` // 頁大小 } findOrderRes struct { orderInfo []orderInfo `json:"orderInfo"` // 商品ID } orderInfo struct { productId string `json:"productId"` // 商品ID productName string `json:"productName"` // 商品名稱 num int `json:"num"` // 商品數量 } deleteOrderReq struct { id string `path:"id"` } deleteOrderRes struct { success bool `json:"success"` // 是否成功 } ) service order { @doc( summary: 建立訂單 ) @handler CreateOrderHandler post /order/add/:token(createOrderReq) returns(createOrderRes) @doc( summary: 獲取訂單 ) @handler FindOrderHandler get /order/find/:token(findOrderReq) returns(findOrderRes) @doc( summary: 刪除訂單 ) @handler: DeleteOrderHandler delete /order/:id(deleteOrderReq) returns(deleteOrderRes) }
http api請求體的反序列化的tag有三種:api
path
:http url 路徑中參數反序列化併發
/order/add/1234567
會解析出來token爲1234567form
:http form表單反序列化,須要 header頭添加 Content-Type: multipart/form-dataapp
/order/find/1234567?page=1&pageSize=20
會解析出來token爲1234567,page爲1,pageSize爲20json
:http request json body反序列化,須要 header頭添加 Content-Type: application/json微服務
{"productId":"321","num":1}
會解析出來productId爲321,num爲1數據校驗
以用戶user.api文件爲例type ( createUserReq struct { age int8 `json:"age,default=20,range=(12:100]"` // 年齡 name string `json:"name"` // 名字 alias string `json:"alias,optional"` // 別名 sex string `json:"sex,options=male|female"` // 性別 avatar string `json:"avatar,default=default.png"` // 頭像 } createUserRes struct { success bool `json:"success"` // 是否成功 } ) service user { @doc( summary: 建立訂單 ) @handler CreateUserHandler post /user/add(createUserReq) returns(createUserRes) }
數據校驗有不少種方式,包括如下但不限:高併發
age
:默認不輸入爲20,輸入則取值範圍爲(12:100],前開後閉name
:必填,不可爲空alias
:選填,可爲空sex
:必填,取值爲male
或female
avatar
:選填,默認爲default.png
更多詳情參見unmarshaler_test.gopost
encoding/json
包序列化,在此再也不累贅配置文件的反序列化
和http api請求體的反序列化
使用同一套解析規則,可參照http api請求體的反序列化
https://github.com/tal-tech/go-zerourl
好將來技術