变量定义
- 变量申明使用
var
关键字,可以一次声明多个变量 - 变量名在前,变量类型在后,未初始化的变量必须指定变量类型
- 变量名由字母、数字、下划线组成,其中首个字符不能为数字
- 局部变量定义后必须在程序中使用
- 定义后未经初始化的变量,程序使用时,其值为系统默认的初值
- 可使用
var()
集中定义变量
样例代码:
package main
import "fmt"
var (
a int
b string
c float64
d bool
)
func main () {
var p1, p2 *int
fmt.Printf("a, b, c, d, p1, p2 = %d, %q, %f, %t, %p, %p", a, b, c, d, p1, p2)
/* 错误使用:
var v //报错:syntax error: unexpected newline, expecting type
var unused int //报错:unused declared and not used
*/
}
输出结果:
a, b, c, d, p1, p2 = 0, "", 0.000000, false, 0x0, 0x0
变量初始化
- 未初始化的变量依然可以使用,其值为系统默认变量类型的初始值
- 定义变量的同时对变量进行初始化,变量类型可省略,系统会根据其初始化的值自动判定变量类型
- 省略
var
关键字,使用自动推导类型:=
对变量进行初始化,同一变量只能使用一次自动推导类型 - 在函数体外只允许一种情况下的赋值操作,即变量定义的同时初始化。
package main
import "fmt"
var out int
var out1 = "hi"
/* 错误使用
out2 := "I'm fine" //报错:syntax error: non-declaration statement outside function body
var out3 string
out3 = "And you?" //报错: syntax error: non-declaration statement outside function body
*/
func main () {
var a int // 未初始化的变量可以使用
var b string = "hello world" // 定义的同时初始化
var c, d = 1.23, true // 可省略变量类型,通过其值推导出变量类型
p := &a // 省略var关键字,使用自动推导定义及初始化
fmt.Printf("a, b, c, d, p = %d, %q, %f, %t, %p", a, b, c, d, p)
/* 错误使用:
a := 10 //报错:no new variables on left side of :=
p1 := &b //报错:unused declared and not used
*/
}
输出结果
a, b, c, d, p = 0, "hello world", 1.230000, true, 0xc0000160a0