go的变量定义了必须使用,不然无法通过编译
全局变量定义后可以不使用,如果全局与局部同名,采用就近原则
如果是简洁模式定义,左边至少应该包括一个新变量
变量的定义
变量从繁到简,总共三种方式
var globalVar = "全局变量无法使用简洁模式定义, 但可以定义了不使用"
func main() {
// 先定义再赋值
var i int;
i = 1
// 定义变量, 定义数据类型, 赋值
var i2 int = 2
// 定义变量, 赋值, 数据类型自动推断
var i3= 3
// 省略变量, 数据类型定义, 数据类型自动推断
i4 := 4
// 定义多个变量
i5, i6, i7 := 5, 6, "i7"
// 会报错, 因为没有定义新的变量
//i5, i6 := 5, 6
//i6, i7 := 6, "i7"
// 表达式中定义了新的i8, 所以不会报错, 并且还给i7赋值了新值(i77)
i7, i8 := "i77", "i8"
fmt.Println(i, i2, i3, i4, i5, i6, i7, i8)
}
变量的零值
int -> 0
string -> ""
bool -> false
float -> 0.0
匿名变量
不想使用的变量可以丢给匿名变量
func main() {
// 赋值给匿名变量, 字符串在go中可以用双引号("")也可以用(``)
i1, _ := 1, `赋值给匿名变量的值`
fmt.Println(i1)
}
go变量交换
其他语言交换需要中间变量,golang不需要
func main() {
a, b := "a", "b"
// 变量直接交换
a, b = b, a
fmt.Println(fmt.Sprintf("a=%s, b=%s", a, b))
}
console:
a=b, b=a