卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34019本站已运行391

结构体中的可选数组

结构体中的可选数组

问题内容

我想让一个数组在结构中可选,并在函数中将其与 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: %vn", tv.DefaultTests)
    } else {
        fmt.Printf("Default Tests empty value: %vn", tv.DefaultTests)
    }
}
卓越飞翔博客
上一篇: Golang regexp MatchString() 不是幂等的
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏