如何在多个赋值语句中分配结构字段变量

时间:2016-11-29 17:42:20

标签: go

如何在多赋值语句中分配struct字段变量?请参考下面的代码。

type TestMultipleReturns struct {
    value string
}

func (t *TestMultipleReturns) TestSomething() {
    someMap := make(map[string]string)
    someMap["Test"] = "world"
    t.value, exists := someMap["doesnotexist"] // fails

    // works, but do I really need a 2nd line?
    tmp, exists := someMap["doesnotexist"] 
    t.value = tmp

    if exists == false {
        fmt.Println("t.value is not set.")
    } else {
        fmt.Println(t.value)
    }
}

1 个答案:

答案 0 :(得分:5)

Short variable declaration不支持分配struct接收器属性;它们在规范定义中被省略:

  

与常规变量声明不同,短变量声明可以重新声明变量,前提是它们最初在相同的块中声明(或者如果块是函数体,则参数列表)具有相同的类型,并且至少有一个非变量声明-blank变量是新的。

修复是在赋值之前定义exists而不是使用短变量声明:

type TestMultipleReturns struct {
    value string
}

func (t *TestMultipleReturns) TestSomething() {
    someMap := make(map[string]string)
    someMap["Test"] = "world"
    var exists bool
    t.value, exists = someMap["doesnotexist"]

    if exists == false {
        fmt.Println("t.value is not set.")
    } else {
        fmt.Println(t.value)
    }
}