变量时程序的基本组成单位,无论是使用哪个编程语言来进行开发,变量都是其程序的基本组成单位.
- 变量表示内存中的一个存储区域,该区域有属于自己的名称(变量名 )和类型(变量类型)
Golang 变量有三种使用方式
-
指定变量类型,声明后若不赋值则使用默认值
var num int // 0
-
根据值自行判断变量类型(类型推断)
var num = 10 // int
-
声明变量时省略
var
关键字,需要使用:=
进行声明num := 10
变量名在相同作用域中不能重复声明,否则会导致编译错误
在 Go 语言中,同类型的变量支持同时声明
var one, two, three int
fmt.Println("one =", one, "two =", two, "three =", three)
# clover @ MacBook-Pro in ~/dev/go/learn/src/go_code/learn/variable [22:54:40] C:1
$ go run main.go
one = 0 two = 0 three = 0
不同类型的变量也是可以同时声明的,但是不推荐这么做
var age, name = 20, "clover"
fmt.Println("age =", age, "name =", name)
# clover @ MacBook-Pro in ~/dev/go/learn/src/go_code/learn/variable [22:57:21] C:1
$ go run main.go
age = 20 name = clover
如果需要同时定义不同类型的变量,那么推荐这样
var age int, name string
在 Go 语言中,任何在方法外部定义的变量都是全局变量,定义方式和以上方式是一样的。全局变量不被使用时不会导致编译错误
package main
import "fmt"
var author = "clover"
func main() {
fmt.Println("author =", author)
}
# clover @ MacBook-Pro in ~/dev/go/learn/src/go_code/learn/variable [22:58:12]
$ go run main.go
author = clover
还可以这样定义
package main
import "fmt"
var (
author = "clover"
age = 20
)
func main() {
fmt.Println("author =", author, "age =", age)
}
注意
-
同一个作用域的数据值在同一类型中可以不断变化
var integer int = 10 integer = 20 // v integer = 30 // v integer = 1.1 // x fmt.Println("integer =", integer)
执行该代码后会得到一个错误,该错误表示无法将
1.1
赋值给int
类型# clover @ MacBook-Pro in ~/dev/go/learn/src/go_code/learn/variable [23:17:44] $ go run main.go # command-line-arguments ./main.go:26:12: cannot use 1.1 (untyped float constant) as int value in assignment (truncated)
-
变量在同一作用域中不能重复定义,
例如以下代码,这是不允许的
func main() { var num = 10 fmt.Println("num =", num) var num = 11 fmt.Println("num =", num) }
在不同作用域中可以重复定义
func main() { var num = 10 fmt.Println("num =", num) { var num = 11 fmt.Println("num inner scope =", num) } }
通过
go run
命令去执行是可以通过编译的# clover @ MacBook-Pro in ~/dev/go/learn/src/go_code/learn/variable [23:17:52] C:1 $ go run main.go num = 10 num inner scope = 11
-
变量构成的三要素:变量名 + 数据值 + 数据类型
-
Go 语言的变量如果没有初始值,那么编译器会使用默认值,例如:数值类型的变量,默认值就是为
0
,而string
类型的变量默认值为空字符串