阅读目录
Golang 中定义变量三种格式
// 标准格式
var 变量名称 数据类型 = 值;
// 自动推导类型格式
var 变量名称 = 值;
// 简短格式(golang官方推荐格式)
变量名称 := 值;
package main
import "fmt"
func main() {
var num1 int // 先定义
num1 = 10 // 后赋值
fmt.Println("num1 ======================== ", num1)
var num2 int = 20 // 定义的同时赋值
fmt.Println("num2 ======================== ", num2)
var num3 = 30 // 定义的同时赋值, 并省略数据类型
fmt.Println("num3 ======================== ", num3)
num4 := 40 // 定义的同时赋值, 并省略关键字和数据类型
/*
num4 := 40 等价于
var num4 int
num4 = 40
*/
fmt.Println("num4 ======================== ", num4)
}
wgchen@wgchen-virtual-machine:~/桌面/test$ go run .
num1 ======================== 10
num2 ======================== 20
num3 ======================== 30
num4 ======================== 40
wgchen@wgchen-virtual-machine:~/桌面/test$
方式一, 连续定义
package main
import "fmt"
func main() {
var num1, num2 int // 先定义
num1 = 10 // 后赋值
num2 = 20
fmt.Println("num1 = ", num1)
fmt.Println("num2 = ", num2)
var num3, num4 int = 30, 40 // 定义的同时赋值
fmt.Println("num3 = ", num3)
fmt.Println("num4 = ", num4)
var num5, num6 = 50, 60 // 定义的同时赋值, 并省略数据类型
fmt.Println("num5 = ", num5)
fmt.Println("num6 = ", num6)
num7, num8 := 70, 80 // 定义的同时赋值, 并省略关键字和数据类型
fmt.Println("num7 = ", num7)
fmt.Println("num8 = ", num8)
}
方式二, 变量组
package main
import "fmt"
func main() {
var ( // 先定义
num1 int
num2 float32
)
num1 = 10 // 后赋值
num2 = 3.14
fmt.Println("num1 = ", num1)
fmt.Println("num2 = ", num2)
var ( // 定义的同时赋值
num3 int = 30
num4 float32 = 6.66
)
fmt.Println("num3 = ", num3)
fmt.Println("num4 = ", num4)
var ( // 定义的同时赋值, 并省略数据类型
num5 = 50
num6 = 7.77
)
fmt.Println("num5 = ", num5)
fmt.Println("num6 = ", num6)
var ( // 一行定义多个
num7, num8 = 70, 80
num9, num10 = 9.99, 100
)
fmt.Println("num7 = ", num7)
fmt.Println("num8 = ", num8)
fmt.Println("num9 = ", num9)
fmt.Println("num10 = ", num10)
}
Go语言变量定义注意点
简短模式的含义是定义的同时初始化
package main
import "fmt"
func main() {
num := 10
num := 20 // 编译报错, 重复定义
fmt.Println("num = ", num)
}
一定不要把:=当做赋值运算符来使用
package main
import "fmt"
var num = 10 // 定义一个全局变量
func main() {
num := 20 // 定义一个局部变量
fmt.Println("num = ", num)
test()
}
func test() {
fmt.Println("num = ", num) // 还是输出10
}
:=只能用于定义局部变量,不能用于定义全局变量
package main
import "fmt"
num := 10 // 编译报错
func main() {
fmt.Println("num = ", num)
}
使用:=定义变量时,不能指定var关键字和数据类型
package main
import "fmt"
func main() {
//var num int := 10 // 编译报错
//var num := 10 // 编译报错
num int := 10 // 编译报错
fmt.Println("num = ", num)
fmt.Println("num = ", num)
}
变量组中不能够使用:=
package main
import "fmt"
func main() {
var(
num := 10 // 编译报错
)
fmt.Println("num = ", num)
}
通过:=同时定义多个变量, 必须给所有变量初始化
package main
import "fmt"
func main() {
//num1, num2 := 666, 888 // 正确
num1, num2 := 666 // 报错
fmt.Printf("%d, %d\n", num1, num2)
}
通过:=同时定义多个变量, 只要任意一个变量没有定义过,都会做退化赋值操作
package main
import "fmt"
func main() {
// 定义一个变量num1
num1 := 10
// 同时定义两个变量num1和num2, 由于num2从来没有定义过,
// 所以对于num1来说:=退化为赋值运算符, 而对于num2来说:=仍然是定义+赋值
num1, num2 := 20, 30
fmt.Println("num1 = ", num1)
fmt.Println("num2 = ", num2)
}
wgchen@wgchen-virtual-machine:~/桌面/test$ go run .
num1 = 20
num2 = 30
wgchen@wgchen-virtual-machine:~/桌面/test$
以下方式报错:
package main
import "fmt"
func main() {
num1 := 10
num2 := 20
// 报错, 因为num1,和num2都已经被定义过
// 至少要有任意一个变量没有被定义过,才会退化赋值
num1, num2 := 30, 40
fmt.Println("num1 = ", num1)
fmt.Println("num2 = ", num2)
}
定义的局部变量或者导入的包没有被使用, 那么编译器会报错,无法编译运行,但是定义的全局变量没有被使用,编译器不会报错, 可以编译运行。