go 第二篇(变量声明、数据类型)
1、变量声明
go是一种静态语言,意味着变量的类型固定,这个类型需要在声明的时候指明。
声明变量有两个关键词var const,const是声明一个常量。
var x int
声明x,其类型是int
var x int = 9
声明x,其类型是int,并初始化值为9
如果声明并初始化,因为初始化值有类型,所以变量类型可以省略。
var x = 9
如果变量未初始化,则其值是零值。每种类型的变量都有自己的零值。
可以一次声明并初始化多个变量
var (
name = "张三",
age = 18,
isAdult = true
)
const和var一样,只是const声明的是常量
除了用const和var,还可以用短变量声明操作符:=
,声明并初始化变量x := 9
。
这种方式只能声明一个局部变量,只能在函数里这样做
func main() {
x := 9
}
golang里没有变量提升,使用一个变量前必须先声明。
go匿名变量,go里面的函数,是可以返回多个值的,有时候不需要一些值,可以用一个匿名变量接收。
func queryUserName() (string, err) {
return "zs", errors.New("err")
}
name, _ := queryUserName() // 不关心err,所以用匿名变量忽略它
变量作用域,有全局变量,局部变量。一个变量声明了,就必须要使用,不然是会报错的。短变量无法改写一个全部变量。
var age = 99
func main() {
f()
fmt.Println("🍌", age)
}
func f() {
age := 88
fmt.Println("🍎", age)
}
2、数据类型
布尔类型
bool var x bool
零值是false
整数类型
int8、int16、int32、int64、int
uint8、uint16、uint32、uint64、uint
int8是带符号的8位整数,范围是 -128~127
uint8是不带符号的8位整数,范围是0~255
int和uint的位数都是一个机器字长,64位系统就是64位,32位就是32
浮点数类型
float32
float64
字符串
string 字面量只能用""
和``
,不能用单引号
name := "zhangsan"
byte类型
代表一个字节,也是uint8类型的别名。比如读取一个文件,这堆二进制内容就是又byte类型组成的数组。
func main() {
b, _:= ioutil.ReadFile("xxx.png")
fmt.Println(reflect.TypeOf(b))
fmt.Println(b)
}
rune类型
上面说字符串不能用单引号,rune用单引号声明,这其实也暗示rune类型和字符也有点关系,它代表的是一个字符的[unicode码点]
func main() {
x := '张'
fmt.Println(x, reflect.TypeOf(x))
}
如果看完了上面关于unicode的介绍,就会知道一个unicode码点,是4个字节。rune也是int32的别名。(至于为什么不是uint32,我也搞不懂为什么要这样)