在变量之前使var会自动初始化为该类型的零值
变量可以是基本数据类型,或者是结构体是interface。
结构体的零值nil,相当于null。
全局变量可以只声明,不使用
定义多个变量
var (
a int
b string
c,d *int//cd均为int的指针
)在函数体内部声明变量可以使:=相当于直接使var,
var是纯粹的定义变量的关键字,所以如果使用var来定义定义过的变量是不行的,例如
var a, b, c = 1, 2, 3
var a, c, d = 1, 2, 3```
这个是不行的,但:=可以
a, b, c := 1, 2, 3
a, c, d := 1, 2, 3结果是a、b两个变量被重新赋值,没有创建新的变量
不同类型不能混用,int和int32也不能混用
常量可以,常量可以根据上下文来自动操作数据类型
定义复数
complex64 (32 位实数和虚数)
complex128 (64 位实数和虚数)
re+imI 来表示,其中 re 代表实数部分im 代表虚数部分I 代表根号负 1。函数 real(c) 和 imag(c) 可以分别获得相应的实数和虚数部分
使用反引号可以将专业原样输出sss\n\,输出结sss\n
常量不使用是不会报错的
const可以定义一个常量,定义的时候可以在后面加上数据类型,也可以不加。未定义类型的常量会在必要时刻根据上下文来获得相关类型。常量的值必须是能够在编译时就能够确定的。
const a=2/3//可以的。但是后续不能修改数字或者字符串常量是不能取地址的。只有结构体字面量可以做到取地址。
编译时自定义函数是不能使用的,但是内置函数可以使用
反斜杠 \ 可以在常量表达式中作为多行的连接符使用
const可以用全部赋给一个值
const beef, two, c = "eat", 2, "veg"
const Monday, Tuesday, Wednesday, Thursday, Friday, Saturday = 1, 2, 3, 4, 5, 6
const (
Monday, Tuesday, Wednesday = 1, 2, 3
Thursday, Friday, Saturday = 4, 5, 6
)
const(
a="haha"
b //haha
c //haha
)iota是一个常量生成器,从0开始增加
iota 也可以当场一个变量来使用
iota和行数计数器相似,想要完全重置需要重新开一个const
const(
_=iota
a//1
b//2
c//3
)
//或者
const(
a=iota//0
b//1
c//2
)
const a=iota//a=0
const (
Apple, Banana = iota + 1, iota + 2 // Apple=1 Banana=2
Cherimoya, Durian // Cherimoya=2 Durian=3
Elderberry, Fig // Elderberry=3, Fig=4
)
const(
a=1<<iota //右移0位
b //2 移动1位
c //4
d //8
e //16
)
const (
b = 1 << iota //01
c //10
d //100
e = iota //3
r //4
x = iota //5
z //6
)iota只能在一个块里面增长,每次遇到const都会重置。