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

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