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

結構體中的可選數組

WBOY
WBOY轉載
2024-02-05 23:15:141006瀏覽

結構體中的可選數組

問題內容

我想讓一個陣列在結構中可選,並在函數中將其與 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刪除