继续来控go语言的陷阱,今天来一发go语言中未使用变量的陷阱,不使用就扔掉嘛,go语言发明人如是说…
先来看坑:
package main
var gvar int //not an error
func main() {
var one int //error, unused variable
two := 2 //error, unused variable
var three int //error, even though it's assigned 3 on the next line
three = 3
}
运行结果
./hello.go:6: one declared and not used
./hello.go:7: two declared and not used
./hello.go:8: three declared and not used
好吧,one、two、three这三个变量都有问题。one只是作了声明,two赋值,three先声明后赋值,本质上这三个变量都没有被使用。
来看正确的写法:
package main
import "fmt"
package main
import "fmt"
func main() {
var one int
_ = one
fmt.Println(one)
two := 2
fmt.Println(two)
var three int
three = 3
one = three
var four int
four = four
}
运行结果
0
2
对于未赋值的整型变量one,go默认赋值为0。由正确的写法可以看出,在go中,对于使用的定义,是变量需要出现在赋值号的右边,变量才被认为使用了。go的这种设计很合理,运行程序的过程中,减少了一些不必要的判断与赋值,相对一python而言,容错性变差,仅这一点而言,性能会更好。