GO学习第二章
GO学习第二章
数据类型
-
布尔型
布尔型的值只可以是常量 true 或者 false
1
var b bool = true
-
数字类型
Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码
-
字符串类型
Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本
-
派生类型
- 指针类型(Pointer)
- 数组类型
- 结构化类型(struct)
- Channel 类型
- 函数类型
- 切片类型
- 接口类型(interface)
- Map 类型
变量
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是使用 var 关键字,格式为
1 | var identifier type |
可以一次声明多个变量
1 | var identifier1, identifier2 type |
变量声明
-
指定变量类型,如果没有初始化,则变量默认为零值
-
数值类型(包括complex64/128)为 0
-
布尔类型为 false
-
字符串为 “”(空字符串)
-
以下几种类型为 nil
1
2
3
4
5
6var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
-
-
根据值自行判定变量类型
-
如果变量已经使用 var 声明过了,再使用 := 声明变量,就产生编译错误
- 示例
1
2var intVal int
intVal :=1 // 这时候会产生编译错误,因为 intVal 已经声明,不需要重新声明可以修改为
1
2
3
4
5intVal := 1 // 此时不会产生编译错误,因为有声明新的变量,因为 := 是一个声明语句
/**intVal := 1 相等于:
var intVal int
intVal =1
*/
值类型和引用类型
-
所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值
当使用等号
=
将一个变量的值赋值给另一个变量时,如:j = i
,实际上是在内存中将 i 的值进行了拷贝通过 &i 来获取变量 i 的内存地址
值类型变量的值存储在堆中
-
一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。
这个内存地址称之为指针,这个指针实际上也被存在另外的某一个值中
常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型,格式为
1 | const identifier [type] = value |
可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型
-
常量还可以用作枚举
1
2
3
4
5const (
Unknown = 0
Female = 1
Male = 2
)比如可以用数字 0、1 和 2 分别代表未知性别、女性和男性
iota
iota,特殊常量,可以认为是一个可以被编译器修改的常量
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)
1 | const ( |
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式
1 | const ( |
示例
1 | package main |
结果为
1 | 0 1 2 ha ha 100 100 7 8 |