定义变量
go是静态语言,静态语言和动态语言相比差异很大
- 变量必须先定义后使用
- 变量必须有类型
- 类型定下来不能改变
// 全局变量和局部变量
var(
name = 1
age = 18
ok bool
)
func main(){
// 方法一
var name int
name = 1
// 方法二
var name = 1
//方法三 简洁定义
name := 1
// 同时定义多个变量
var user1, user2, user3 = '123', 1, '345'
}
注意
-
变量名不能冲突
-
变量定义了不使用是不行的,全局变量除外
-
要求变量的类型和赋值类型一致
-
简洁变量不能应用于全局
-
变量是有零值(默认值)
定义常量
常量定义的时候就指定的值,不能修改
func main(){
// 显式定义
const PI float32 = 3.1415926
const(
UNKNOWN = 1
FEMALE = 2
MALE = 3
)
const(
X int = 1
Y
A = "123"
B
)
// 1 1 '123' '123'
fmt.Println(X,Y,A,B)
}
注意
- 常量尽量全部大写
- 常量类型只可以定义bool、数值(整数、浮点数和复数)和字符串
- 定义的常量可以不使用
- 显式定义左右数据类型要一致
- 成组定义的时候,没有定义类型和值回自动沿用上一个
iota
iota,特殊常量,可以认为是一个可以被编译器修改的常量
func main(){
const(
USER1 = iota
USER2
USER3 = "123" // iota内部仍然会增加计数器
USER4
USER5 = iota
)
// 0 1 '123' '123' 3
fmt.Println(USER1,USER2,USER3,USER4, USER5)
}
注意
- 如果中断了iota后,需要显式恢复,后续会自动递增
- 自增类型默认是int类型
- iota能简化const类型定义
- 每次出现const,iota会被初始化
匿名变量
因为变量定义了必须要使用,所以引入了匿名变量,可以不需要使用
func a()(int, bool){
return 0,false
}
func main(){
// 匿名变量
var _ int
_,ok := a()
if ok{
...
}
}
变量的作用域
func main(){
{
localName := "local"
fmt.Println(localName)
}
// error
fmt.Println(localName)
}