-
偶然的你
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}
-
呼如林
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)}
-
慕田峪7331174
您可以这样简化您的结构: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{"","",""})