2. Go语言基本语法 - 变量及常量
一、变量
(一)变量的概念
- 变量时计算机语言中存储数据的抽象概念。变量的功能是存储数据。变量通过变量名访问;
- 变量的本质是计算机分配的一小块内存,专门用于存放指定 数据,在程序运行过程中该数据可以发生改变;
- 变量的存储往往具有瞬时性,当程序运行结束,存放该数据的内存就会释放,而该变量就会消失;
- Go语言的变量名由字母、数字、下划线组成,首个字符不能输数字;
(二)声明变量
Go主要有静态语言、函数多返回值、天生并发、内置GC(自动垃圾回收)、安全性高、语法简单、编译快速。
- 静态语言:编译时变量的数据类型即可确定的语言,要求在使用变量之前必须声明数据类型
- 未初始化的标准格式
var 变量名 变量类型
- 未初始化批量格式
var(
a int
b string
c []float32
d func() bool
e struct{
x int
y string
}
)
未初始化变量的默认值
- 整型和浮点型变量默认值 0
- 字符串默认值 ""
- 布尔值默认值 false
- 函数、指针变量默认值 null
package main
import "fmt"
func main() {
var (
a int
b string
c float32
d bool
e func() string
f [3]int
)
fmt.Printf("%T %v \n", a, a)
fmt.Printf("%T %v \n", b, b)
fmt.Printf("%T %v \n", c, c)
fmt.Printf("%T %v \n", d, d)
fmt.Printf("%T %v \n", e, e)
fmt.Printf("%T %v \n", f, f)
}
结果:
int 0
string
float32 0
bool false
func() string <nil>
[3]int [0 0 0]
- 初始化变量的标准格式
var 变量名 类型 = 表达式
- 初始化变量的编译器自动推断类型格式
var 变量名 = 表达式
- 初始化变量的简短声明格式
- 变量名 := 表达式
- 使用 := 赋值操作符,:= 可以高效创建一个新的变量,称之为初始化声明
- 声明语句省了 var 关键字
- 变量类型将由编译器自动推断
- 这是声明变量的首选形式,但它只能被用在函数体内,而不可以用于全局变量的声明与赋值
- 该变量名必须是没有定义过的变量,若定义过,将发生编译错误
- 在多个短变量声明和赋值中,至少有一个新声明的变量出现在左侧中,那么即便有其他变量名可能是重复声明的,编译器不会报错
package main
import "fmt"
// 声明全局变量
var n = 10
func main() {
// 短变量初始化
m := 20
fmt.Printf("%T %v \n", m, m)
fmt.Printf("%T %v \n", n, n)
// 为变量赋多个值
a, b, c := "Hello", "World", 100
fmt.Printf("%T %v \n", a, a)
fmt.Printf("%T %v \n", b, b)
fmt.Printf("%T %v \n", c, c)
}
结果:
int 20
int 10
(三)变量多重赋值(多个变量同时赋值)
Go语法中,变量初始化和变量赋值是两个不同的概念。Go语言的变量赋值与其他语言一样,可以实现变量交换。
(四)匿名变量
- Go语言的函数可以返回多个值,而事实上我们并不是对所有的返回值都用得上。那么就可以使用匿名变量,"_" 下划线替换即可
- 匿名变量不占命名空间,不会分配内存
package main
import "fmt"
func main() {
// 匿名变量
m,_ := 20,"enen"
fmt.Printf("%T %v \n", m, m)
// 变量互换
x := 100
y := 200
fmt.Println(x, "--", y)
x, y = y, x
fmt.Println(x, "--", y)
}
结果:
100 -- 200
200 -- 100