[英]Checking for Empty Integer in Golang
我正在設計一個 API 用戶發送 integer 值並根據發送的值執行一些操作。 在驗證請求中是否存在此值的驗證期間,我必須將其等同於 0 即if intValue == 0
。
但是,如果值為 0,我還必須執行不同的操作。有什么方法可以檢查 integer 不存在或為空而不等於 0?
注意:要求由客戶設定,我無法更改。
在將 JSON 數據解碼為結構時,您可以通過將可選字段聲明為指針類型來區分它們。
例如:
type requestFormat struct {
AlwaysPresent int
OptionalValue *int
}
現在,當值被解碼時,您可以檢查是否提供了該值:
var data requestFormat
err := json.NewDecoder(request.Body).Decode(&data)
if err != nil { ... }
if data.OptionalValue == nil {
// OptionalValue was not defined in the JSON data
} else {
// OptionalValue was defined, but it still may have been 0
val := *data.OptionalValue
}
正如@phuclv 所說,在生產中
沒有“空整數”這樣的東西
喜歡
@Hymns 對於迪斯科使用 json.NewDecoder 或驗證器
但它被放棄了: 為什么在 Protocol Buffers 3 中刪除了 required 和 optional
使用 map 但結構,它可以判斷一個字段是否存在
下面是一個例子
package main
import (
"encoding/json"
"io/ioutil"
"net/http"
)
type Test struct {
Name string
Age int
}
func testJson(w http.ResponseWriter, r *http.Request) {
aMap := make(map[string]interface{})
data, _ := ioutil.ReadAll(r.Body)
json.Unmarshal(data, &aMap)
test := Test{}
json.Unmarshal(data, &test)
}
func main() {
http.HandleFunc("/", testJson)
http.ListenAndServe(":8080", nil)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.