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")
}