1 基本类型
- 零值并不等于空值,而是当变量被声明为某种类型后的默认值,
通常情况下值类型的默认值为0,bool为false,string为空字符串,引用为nil。
1.1 布尔类型
- 关键字:bool
- 长度:1字节
- 取值范围:true, false
- 注意事项:不可以用数字代表true或false
- 默认值为false
1.2 整型类型
1.2.1 整型
-
int/uint
根据运行平台可能为32或64位 -
int8/uint8(byte)
长度1字节,uint别名byte
-
int16/uint16
长度2字节 -
int32(rune)/uint32
长度4字节 -
int64/uint4
长度8字节 -
uintptr
足够保存指针的 32 位或 64 位整数型
1.2.1 浮点型
-
float32
长度4字节,小数精确到7位 -
float64
长度8字节,小数精确到15位
1.3 复数类型
-
complex64
长度8字节 -
complex128
长度16字节
1.4 其他类型
- array
- struct
- string
1.5 引用类型
- slice
- map
- chan
1.6 接口类型
- interface
1.7 函数类型
- func
1.8 指针
在Go当中不
支持指针运算以及”->”运算符,而直接采用”.”选择符来操作指针
目标对象的成员
- 操作符”&”取变量地址,使用”*”通过指针间接访问目标对象
- 默认值为 nil 而非 NULL
2 声明与赋值
2.1 单个变量的声明与赋值
- 变量的声明格式:var <变量名称> <变量类型>
- 变量的赋值格式:<变量名称> = <表达式>
- 声明的同时赋值:var <变量名称> [变量类型] = <表达式>
var a int //变量声明
a = 123 //变量赋值
//声明同时赋值
var b int = 12
//省略类型,系统自动推断
var c = 12
//局部变量的简写
d := 12
2.2 多个变量的声明与赋值
- 全局变量的声明可使用 var() 的方式进行简写
- 全局变量的声明不可以省略 var,但可使用并行方式
- 所有变量都可以使用类型推断
- 局部变量不可以使用 var() 的方式简写,只能使用并行方式
var (
//常规声明与赋值
a = "hello"
//并行方式并自动推断类型
b , c = 1 , 2
// d := 1 编译错误,全局变量不能用:=
)
//并行声明多变量
var a,b,c,d int
//并行赋值
a,b,c,d = 1,2,3,4
//并行声明与赋值
var e,f,g int = 1,2,3
//省略类型,并行声明与复制类型自动推断
var i,j,k = 1,2,3
//多个变量声明与复制的最简单写法
a,b,c := 1,"hello",2
2.3 变量的类型转换
- Go中不存在隐式转换,所有类型转换必须显式声明
- 转换只能发生在两种相互兼容的类型之间
- 类型转换的格式:
<ValueA> [:]= <TypeOfValueA>(<ValueB>)
//相互兼容的类型可以通过类型转换
var a float32 = 1.0
b:=int(a)
//编译错误
var c bool = true
d:=int(c)
3 常量
3.1 常量的定义
- 常量的值在编译时就已经确定
- 常量的定义格式与变量基本相同
- 等号右侧必须是常量或者常量表达式
- 常量表达式中的函数必须是内置函数
//定义单个常量
const a int = 1
const b = 'A'
const(
c = 1
d = "hello"
len = len(d)
)
//定义多个常量
const i,j,k = 1,2,3
const(
x,y,z = "1",2,"3"
)
3.2 常量的初始化规则与枚举
- 在定义常量组时,如果不提供初始值,则表示将使用上行的表达式
- iota是常量的计数器,从0开始,组中每定义1个常量自动递增1
- 通过初始化规则与iota可以达到枚举的效果
- 每遇到一个const关键字,iota就会重置为0
const (
//a和b都为“A”
a = "A"
b
//c,d分别为2,3
c = iota
d
//e为65
e = 'A'
)
const(
//e,f分别为0和1
e = iota
f
)