go的变量redeclare的问题,golang的一个小坑
go的变量声明有几种方式:
1 通过关键字 var 进行声明
例如:var i int 然后进行赋值操作 i = 5
2 最简单的,通过符号 := 进行声明和赋值
例如: i:=5 golang会默认它的类型
下面看一段代码,我们先声明一个变量a,然后再重新声明变量a,b,在这个函数中,变量a被声明了2次,成为a的重声明(redeclare),执行结果为23
package main
import (
"fmt"
)
func main(){
a:=1
a,b:=2,3
fmt.Println(a,b)
}
精彩的部分来了,请看第二段代码
package main
import (
"fmt"
)
type A struct{
i int
}
func main(){
testA:=&A{}
testA.i=1
testA.i,b:=2,3
fmt.Println(testA.i,b)
}
我们定义了一个简单的结构体A,A中的成员变量为i,我们在testA.i,b:=2,3对成员变量进行了新的声明和赋值,执行会报错。
原因:这个问题Google上是有过讨论的
从go的spec看,redeclare是一个赋值,不是创建个新变量,为什么对于成员变量不可以,只能暂时理解成设计问题吧
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。