变量
使用关键字var定义变量,格式为:var 变量名 数据类型 = 值
对于未初始化的变量,编译器会自动初始化。
go语言支持推断赋值,即如果给变量提供初始化值,可以省略变量类型。由编译器自行推断
go语言支持组赋值
var name string = "wangyijie"
//组声明,赋值
var (
name = "wangyijie"
i = 0
pi float64 = 3.1415926
a bool //默认true
b int //默认0
c *int //默认nil
d float64 //默认0.0
arr [3]int //默认[0 0 0]
value 变量类型 = 20
)
在函数体内生明变量还可以用 typeName := typeValue的格式,如果在函数体外使用会报出编译错误:non-declaration statement outside function body,另外var 不可以和”:=”同时使用
//推断赋值
func assgniment() {
//推断赋值
name := "哀木梯"
fmt.Println(name)
}
此外,go可以并行定义多个变量
//并行声明,前提是声明的数据类型一致
var name, passwd, loginTime string
//同时也可以并行赋值,若声明变量类型,并行的变量类型需要一致
var name, passwd, loginTime string = "wangyijie", "123456", "23246382637"
var age, gender = 12, "男" //也可不指定
//并行推断声明,赋值(应为是编译器自行推断,变量类型可以不一致)
func demo() {
age desc := 20, "hello, world"
fmt.println(age, desc)
}
注:若声明的局部变量为使用,编译阶段会报错,全局变量则没有这个问题
//go语言中没有一个名为while的关键字,所以你可以声明一个名为while的变量
var while int
//如果局部变量未使用,会报出编译时错误
func demo1() {
var time string //编译报错: time declared and not used
}
变量的作用域
var name string = "wangyijie"
func setName(){
var name string = "lizheng"
fmt.Println(name) //输出lizheng
}
fmt.Println(name) //输出wangyijie