GO数据类型
基础数据类型
布尔类型
取值: true
、 false
默认值: false
数字类型
数字类型比较多,默认值都是 0
。定义int类型时,默认根据系统类型设置取值范围,32位系统与int32的值范围相同,64位系统与int64的值范围相同。
类型 | 名称 | 存储空间 | 值范围 |
---|---|---|---|
int8 | 8位整型 | 8-bit | -128 ~ 127 |
uint8 | 无符号 8 位整型 | 8-bit | 0 ~ 255 |
int16 | 16位整型 | 16-bit | -32768 ~ 32767 |
uint16 | 无符号16位整型 | 16-bit | 0 ~65535 |
int32 | 32位整型 | 32-bit | -2147483648 ~ 2147483647 |
uint32 | 无符号32位整型 | 32-bit | 0 ~ 4294967295 |
int64 | 64位整型 | 64-bit | -9223372036854775808 ~ 9223372036854775807 |
uint64 | 无符号64位整型 | 64-bit | 0 ~ 18446744073709551615 |
int | 整型 | 系统决定 | 32位系统为 int32 的值范围,64位系统为 int64 的值范围 |
- | - | - | - |
float32 | 32位浮点数(精度 6位小数 ) | 32-bit | IEEE-754 1.401298464324817070923729583289916131280e-45 ~ 3.402823466385288598117041834516925440e+38 |
float64 | 64位浮点数(精度 15位小数 ) | 64-bit | IEEE-754 4.940656458412465441765687928682213723651e-324 ~ 1.797693134862315708145274237317043567981e+308 |
- | - | - | - |
complex64 | 复数,含 float32 位实数和 float32 位虚数 | 64-bit | 实数、虚数的取值范围对应 float32 |
complex128 | 复数,含 float64 位实数和 float64 位虚数 | 128-bit | 实数、虚数的取值范围对应 float64 |
- | - | - | - |
byte | 字符型,unit8 别名 | 8-bit | 表示 UTF-8 字符串的单个字节的值,对应 ASCII 码的字符值 |
rune | 字符型,int32 别名 | 32-bit | 表示 单个 Unicode 字符 |
uintptr | 无符号整型 | 由系统决定 | 能存放指针地址即可 |
字符串类型
编码: GO 中,字符串的编码默认都是 UTF-8
默认值: 空字符串
错误(error)
error
类型本身是 Go 语言内部定义好的一个 接口
,接口里定义了一个 Error() 打印错误信息的方法,源码如下:
type error interface {
Error() string
}
复合数据类型
指针(pointer)
指针其实就是指向一个对象(任何一种类型数据、包括指针本身)的地址值,对指针的操作都会映射到指针所指的对象上。
数组(array)
数组为 一组相同数据类型数据
的集合,数组定义后 大小固定
,不能更改,每个元素称为element,声明的数组元素默认值都是 对应类型的零值
。而且数组在Go语言中是一个 值类型(value type)
,所有值类型变量在赋值和作为参数传递时都会 产生一次复制动作,即对原值的拷贝。
切片(slice)
因为数组的长度定义后不可修改,所以需要切片来 处理可变长数组数据
。切片可以看作是一个可变长的数组,是一个 引用类型
。它包含三个数据:
字典/映射(map)
map 是一种键值对的 无序
集合,与 slice 类似也是一个 引用类型
。map 本身其实是个 指针
,指向内存中的某个空间。
通道(channel)
channel 是为 goroutine 间通信
提供通道。goroutine 是 Go 语言提供的语言级的协程,是对 CPU 线程和调度器的一套封装。 channel 也是 类型相关
的,一个 channel 只能传递一种类型的值。
结构体(struct)
结构体是一种 聚合的数据类型
,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。
接口(interface)
接口用来 定义行为
。Go 语言不同于面向对象语言,没有类
的概念,也没有传统意义上的继承。Go 语言中的接口,用来 定义一个或一组行为
,某些对象实现了接口定义的行为,则称这些对象实现了(implement)该接口,类型即为该接口类型。 定义接口也是使用 type 关键字,如下:
type IPeople interface{
Say()
}
实现该接口:
type man struct{}
func (m man) Say() {
fmt.Println("hello world")
}