Pointers 在Golang中赋值
我创建了一个类型为Pointers 在Golang中赋值,pointers,go,composite-literals,Pointers,Go,Composite Literals,我创建了一个类型为 var RespData []ResponseData ResponseData是一个结构,如下所示: type ResponseData struct { DataType string Component string ParameterName string ParameterValue string TableValue *[]Rows }
var 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
你能举个例子告诉我,在
TableValue
TableValue
中指定任何值,它是指向[]行的指针(一部分行
)
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)
}
行
是指向[]选项卡行
(选项卡行的切片
)的指针。因此,您可以使用创建一个行
值,并获取一个指向[]TabRow
-这将是行
类型的指针
您可以使用另一个slice literal(创建[]行
)获取指向[]行
的指针,并获取其地址,该地址的类型为*[]行
,即TableValue
的类型,因此您可以直接将其分配给ResponseData.TableValue
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)
}
所以你可以这样做:
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}]
试穿一下
在指定元素(类型为TabRow
)的slice literal中,您甚至可以省略该类型,它变为:
var tv1 Rows = &[]TabRow{{"name11", "value11", "type11"},
{"name12", "value12", "type12"}}
var tv2 Rows = &[]TabRow{{"name21", "value21", "type21"},
{"name22", "value22", "type22"}}
如果您使用,甚至可以进一步缩短(试穿):
TableValue
是指向[]行的指针(行的切片)
行
是指向[]选项卡行
(选项卡行的切片
)的指针。因此,您可以使用创建一个行
值,并获取一个指向[]TabRow
-这将是行
类型的指针
您可以使用另一个slice literal(创建[]行
)获取指向[]行
的指针,并获取其地址,该地址的类型为*[]行
,即TableValue
的类型,因此您可以直接将其分配给ResponseData.TableValue
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)
}
所以你可以这样做:
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}]
试穿一下
在指定元素(类型为TabRow
)的slice literal中,您甚至可以省略该类型,它变为:
var tv1 Rows = &[]TabRow{{"name11", "value11", "type11"},
{"name12", "value12", "type12"}}
var tv2 Rows = &[]TabRow{{"name21", "value21", "type21"},
{"name22", "value22", "type22"}}
如果您使用,甚至可以进一步缩短(试穿):
您可以简化您的结构,从而:
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{"","",""},
},
}
并添加一个新的选项卡行,其中包含:
resp.TableValue = append(resp.TableValue, &TabRow{"","",""})
您可以简化您的结构,从而:
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{"","",""},
},
}
并添加一个新的选项卡行,其中包含:
resp.TableValue = append(resp.TableValue, &TabRow{"","",""})
指向切片的指针(
*[]TabRow
)很少有用,通常是作者不理解的一个标志(类似于映射已经是引用类型)。此外,TableValue
最终成为指向一个似乎不需要的切片的指针。指向切片的指针(*[]TabRow
)很少有用,通常是作者不理解的标志(类似于映射的指针已经是引用类型)。此外,TableValue
最终成为指向一个似乎不需要的切片的指针。这里TableValue的类型是*[]行。如何分配TableValue的值?@susheelchaudhary你说得对,我编辑了答案以创建该类型。这里TableValue的类型是*[]行。如何分配TableValue的值?@susheelchaudhary你说得对,我编辑了答案以创建该类型。在ResponseData中,TableValue的类型是*[]行,而不是*行。在ResponseData中,TableValue的类型是*[]行,而不是*行。