如何在多赋值语句中分配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)
}
}
答案 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)
}
}