使用短变量声明遇到的问题

shadow150519 · · 1935 次点击
#### 为什么涉及结构体,简短变量声明的规则会报错 根据《Go语言圣经》里面的 2.3.1. 简短变量声明一节提到 http://books.studygolang.com/gopl-zh/ch2/ch2-03.html ``` 这里有一个比较微妙的地方:简短变量声明左边的变量可能并不是全部都是刚刚声明的。如果有一些已经在相同的词法域声明过了(§2.7),那么简短变量声明语句对这些已经声明过的变量就只有赋值行为了。 ``` 按照这个理论的话,就出现了楼主的疑问 不过楼主的代码不完整,我补充了一个更简单完整点的 ```golang package main import "fmt" type Page struct { Title string Body string } func main() { // 正确的 --- 在这里a是赋值行为,b是声明行为 var a string = "111" a, b := GetString() fmt.Printf("a:%s; b:%s\n", a, b) // 输出 a:aaa; b:bbb // 错误的---??? 为什么同样是简短变量声明,这里会出现问题 // 按照简短变量声明的理论来说,p.Body应该是赋值行为,d是声明行为 /*p := Page{} p.Body, d := GetString() fmt.Printf("p.Body:%s; d:%s\n", p.Body, d)*/ } func GetString() (a string, b string) { return "aaa", "bbb" } ``` 以上是我看了楼主的问题,个人猜测楼主的疑问是这样来的?不过我也不太清楚原理,只能等待他人补充
#2
更多评论
这个是基础问题, 你的p.Body不能用:=, 因为已经定义过了.
#1
可以参考一下stackoverflow的回答 https://stackoverflow.com/questions/21345274/go-fails-to-infer-type-in-assignment-non-name-on-left-side-of
#3