GO数据类型

基础数据类型

布尔类型

取值: truefalse

默认值: 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() 打印错误信息的方法,源码如下:

1
2
3
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 关键字,如下:

1
2
3
type IPeople interface{
Say()
}

实现该接口:

1
2
3
4
5
type man struct{}

func (m man) Say() {
fmt.Println("hello world")
}