var的精确学习
var是声明一个变量,在函数内声明的是函数局部变量,出了函数一般就没了,并且函数内的名字必须先声明再使用,例如下面这段代码就是一个函数内的局部变量,main函数内的局部变量a
package main
import "fmt"
func main() {
var a = 1
fmt.Println(a)
}
下面这段就是一个全局变量了,因为它声明在最外面,所以它可以在函数的其他位置被使用
package main
import "fmt"
var a = 1
func main() {
fmt.Println(a)
}
当然,你也可以在后面跟随一下类型,也是完全不影响的
package main
import "fmt"
var a float64 = 1
func main() {
fmt.Println(a)
}
如果你没有给你的类型赋值,那也不要紧,因为go拥有着零值保护机制
package main
import "fmt"
var a float64
func main() {
fmt.Println(a)
}
此时,我们仅仅只是声明了a变量,并没有赋值,由于零值保护机制,所以a是0 数值类型变量对应的零值是0 布尔类型变量对应的零值是false 字符串类型对应的零值是空字符串 接口或引用类型(包括slice、map、chan和函数)变量对应的零值是nil 数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。 在上面的代码中,有一句var a = 1 这里并没有声明类型,但是可以成功的被输出,这是由于go的类型可以是初始化表达式推导出来的 所以,a的类型被推导为int,并没有报错