簡體   English   中英

在 Golang 中賦值

[英]Assigning value in Golang

我創建了一個類型的 var

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

我想填充*[]Rows類型的TableValue

您能否通過在TableValue分配任何值來TableValue

TableValue是一個指向[]Rows (切片Rows )。

Rows是一個指向[]TabRow[]TabRow切片)的TabRow 所以你可以用切片文字創建一個Rows值,並&獲取它的地址,這樣你就有一個指向[]TabRow的指針 - 這將是Rows類型。

您可以通過使用另一個切片文字(創建[]Rows )獲取指向[]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)
}

您可以這樣簡化您的結構:

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{"","",""})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM