我创建了一个类型为
的varvar RespData []ResponseData
ResponseData是一个结构如下:
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
中分配任何值来告诉我一个例子。
答案 0 :(得分:4)
TableValue
是指向[]Rows
(Rows
的切片)的指针。
Rows
是指向[]TabRow
(TabRow
的切片)的指针。因此,您可以使用slice literal创建Rows
值,然后选择its address with &
,以便指向[]TabRow
- 这将是Rows
类型。< / p>
您可以使用另一个切片文字(创建[]Rows
)获取指向[]Rows
的指针,并获取其类型为*[]Rows
的地址TableValue
{1}}所以您可以直接将其分配给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}
答案 1 :(得分:2)
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)
}
答案 2 :(得分:0)
您可以简化您的结构:
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{"","",""})