为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中赋值

在 Golang 中赋值

Go
慕哥9229398 2021-09-20 21:04:55
我创建了一个类型的 varvar RespData   []ResponseDataResponseData 是一个如下结构:type ResponseData struct {    DataType       string          Component      string          ParameterName  string          ParameterValue string          TableValue     *[]Rows }type TabRow struct {    ColName     string     ColValue    string     ColDataType string }type Rows *[]TabRow我想填充TableValue类型*[]Rows。您能否通过在TableValue.
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

TableValue是指向[]Rows(的切片Rows)的指针。


Rows是指向 a []TabRow(的切片TabRow)的指针。所以你可以Rows用切片文字创建一个值,并获取它的地址,&这样你就有一个指向[]TabRow- 这将是类型Rows。


并且您可以[]Rows通过使用另一个切片文字(创建 a []Rows)获取指向的指针,并获取其地址,该地址*[]Rows的类型为 ,TableValue因此您可以直接将其分配给ResponseData.TableValue。


所以你可以这样做:


var tv1 Rows = &[]TabRow{TabRow{"name11", "value11", "type11"},

    TabRow{"name12", "value12", "type12"}}

var tv2 Rows = &[]TabRow{TabRow{"name21", "value21", "type21"},

    TabRow{"name22", "value22", "type22"}}


var TableValue *[]Rows = &[]Rows{tv1, tv2}


fmt.Println(TableValue)

for _, v := range *TableValue {

    fmt.Println(v)

}

输出:


&[0x10436180 0x10436190]

&[{name11 value11 type11} {name12 value12 type12}]

&[{name21 value21 type21} {name22 value22 type22}]

在Go Playground上试一试。


在指定元素(类型TabRow)的切片文字中,您甚至可以省略类型,它变成了这样:


var tv1 Rows = &[]TabRow{{"name11", "value11", "type11"},

    {"name12", "value12", "type12"}}

var tv2 Rows = &[]TabRow{{"name21", "value21", "type21"},

    {"name22", "value22", "type22"}}

如果您使用Short variable declaration,您甚至可以进一步缩短它(在Playground上尝试):


tv1 := &[]TabRow{{"name11", "value11", "type11"}, {"name12", "value12", "type12"}}

tv2 := &[]TabRow{{"name21", "value21", "type21"}, {"name22", "value22", "type22"}}

TableValue := &[]Rows{tv1, tv2}


查看完整回答
反对 回复 2021-09-20
?
呼如林

TA贡献1798条经验 获得超3个赞

func main() {


    rowsList := []TabRow{

        TabRow{

            ColName:     "col1",

            ColValue:    "col1v",

            ColDataType: "string",

        },

        TabRow{

            ColName:     "col2",

            ColValue:    "col2v",

            ColDataType: "int",

        }}


    rows := Rows(&rowsList)


    resp := ResponseData{

        DataType:       "json",

        Component:      "backend",

        ParameterName:  "test",

        ParameterValue: "cases",

        TableValue:     &rows,

    }


    fmt.Printf("%v", resp)

}


查看完整回答
反对 回复 2021-09-20
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您可以这样简化您的结构:


type ResponseData struct {

    DataType       string      

    Component      string      

    ParameterName  string      

    ParameterValue string      

    TableValue     []*TabRow 

}

type TabRow struct {

    ColName     string 

    ColValue    string 

    ColDataType string 

}

然后你可以填充它:


resp := ResponseData {

    DataType: "",

    Component: "",

    ParameterName: "",

    ParameterValue: "",

    TableValue: []*TabRow{

      &TabRow{"","",""},

      &TabRow{"","",""},

      &TabRow{"","",""},

    },

}

并添加一个新的 TabRow:


resp.TableValue = append(resp.TableValue, &TabRow{"","",""})


查看完整回答
反对 回复 2021-09-20
  • 3 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信