首頁 > 後端開發 > Golang > 結構體中的可選數組

結構體中的可選數組

WBOY
發布: 2024-02-05 23:15:14
轉載
1008 人瀏覽過

結構體中的可選數組

問題內容

我想讓一個陣列在結構中可選,並在函數中將其與 if else 一起使用。

type testvalues struct {
    test1 string `json:"test1"`
    defaulttests []string `json:"__tests"`

    //defaulttests *array `json:"__tests,omitempty" validate:"option"`
    test2 string `json:"__test2"`
}
登入後複製
func (x *Controller) createTest(context *gin.Context, uniqueId string, testBody *TestValues) (*http.Response, error) {

    if testBody.DefaultTags {
        postBody, err := json.Marshal(map[string]string{
            "Test2":              testBody.Test2,
            "Test1":                  testBody.Test1,
            "defaultTests":         testBody.DefaultTests,
            "uniqueId":                  uniqueId,
        })
    } else {
        postBody, err := json.Marshal(map[string]string{
            "Test2":              testBody.Test2,
            "Test1":                  testBody.Test1,
            "uniqueId":                  uniqueId,
        })
    }

    ...
}
登入後複製

當我運行程式碼時,它告訴我defaulttests 是未定義的數組,但我不希望彈出此錯誤,因為defaulttests 可以存在,有時它不會出現在json 中,這就是我想將其設為可選的原因。 if else 部分也不行。


正確答案


在檢查陣列是否為空時,最好使用 len()

if len(testbody.defaulttests) > 0 {
  ...
}
登入後複製

檢查下面結構中 defaulttests 的零值,以更清楚地了解此行為

package main

import "fmt"

type TestValues struct {
    Test1        string   `json:"test1"`
    DefaultTests []string `json:"__tests"`

    //DefaultTests *array `json:"__tests,omitempty" validate:"option"`
    Test2 string `json:"__Test2"`
}

func main() {
    var tv = TestValues{Test1: "test"}

    if len(tv.DefaultTests) > 0 {
        fmt.Printf("Default Tests: %v\n", tv.DefaultTests)
    } else {
        fmt.Printf("Default Tests empty value: %v\n", tv.DefaultTests)
    }
}
登入後複製

以上是結構體中的可選數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板