簡體   English   中英

在 Golang 中檢查空的 Integer

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM