登录
首页 >  Golang >  Go问答

结构体中包含可选项数组

来源:stackoverflow

时间:2024-02-26 13:54:21 387浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《结构体中包含可选项数组》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我想让一个数组在结构中可选,并在函数中将其与 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)
    }
}

今天关于《结构体中包含可选项数组》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>