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的类型是*[]行,而不是*行。