1>. 基本数据结构(类型)
[基本概念 - 程序结构]
:命令、声明
:变量、常量
:赋值
:类型
:包、文件
:作用域
[基础数据类型 - 数值类型,逻辑类型,字符类型 => 数据类型用于声明函数和变量]
:整型
:浮点数
:复数
:布尔型
:字符串
:常量
[数据类型 分类]
:基础类型 => 数字、字符串、布尔类型
:复合类型 => 数组、结构体 [通过组合简单类型, 来表达更加复杂的数据结构]
:引用类型 => 指针、切片、字典、函数、通道 [对程序中一个变量或状态的间接引用]
:接口类型
[基础类型]
:数值类型 => 整形数、浮点数、复数 [大小范围和正负符号]
=> 整形 , 有符号和无符号 [int8 int16 int 32 int64] [uint8 uint16 uint32 uint64] [int uint]
=> Unicode字符 rune 类型 , int32等价
=> byte 和 uint8 等价, byte 用于强调数值是院士数据
=> uintptr 无符号整型 [常用于底层编成]
=> 浮点数, float32 、float64
=> 复数 , complex64 、 complex128 [real() 实部、imag()虚部]
:布尔类型 true 、alse
:字符串, 不可变字节序列,[len() 返回字符串字节树木]
[复合数据类型]
:数组 , 固定长度的特定类型元素组成的序列
:Slice 切片 , 可以动态增长和收缩的特定类型元素组成的序列
=> 构成部分 : 指针 (pointer)、长度 (length)、容量 (capacity)
=> len() 长度、cap() 容量
=> 切片操作 , s[i:j] , 0<=i<=j<=cap(s) , 创建新的slice
:Map 字典 ,哈希表, 无序的key/value对的几何
=> map[K]V
=> make(map[string]int)
=> map[string]int{} # 创建空map
=> map[string]int{"key":value}
:结构体 ,聚合数据类型, 多个任意类型的值(成员)聚合成的实体
=> 结构体成员可以通过点操作副访问, 成员名首字母大写,则成员是导出的
=> type StructTypeName struct{
Name valueType
}
=> var StructTypeName varName
:JSON
:模板 [文本和HTML]
[布尔型]
布尔型的值只可以是常量 true 或者 false
[数值类型]
Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码
[字符串类型]
字符串就是一串固定长度的字符连接起来的字符序列, Go的字符串是由单个字节连接起来的
Go语言的字符串的字节使用UTF-8编码标识Unicode文本
[派生类型]
指针类型(Pointer)
数组类型
结构化类型(struct)
Channel 类型
函数类型
切片类型
接口类型(interface)
Map 类型
[数值类型]
1 uint8 无符号 8 位整型 (0 到 255)
2 uint16 无符号 16 位整型 (0 到 65535)
3 uint32 无符号 32 位整型 (0 到 4294967295)
4 uint64 无符号 64 位整型 (0 到 18446744073709551615)
5 int8 有符号 8 位整型 (-128 到 127)
6 int16 有符号 16 位整型 (-32768 到 32767)
7 int32 有符号 32 位整型 (-2147483648 到 2147483647)
8 int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
1 float32 IEEE-754 32位浮点型数
2 float64 IEEE-754 64位浮点型数
3 complex64x 32 位实数和虚数
4 complex128 64 位实数和虚数
1 byte 类似 uint8
2 runex 类似 int32
3 uint 32 或 64 位
4 int 与 uint 一样大小
5 uintptrx 无符号整型,用于存放一个指针
2>. 高级数据结构 - 数组、指针、结构体、切片、范围、集合
-> 具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型
[数组声明]
: var variable_name [SIZE] variable_type
[数组初始化]
: var variable_name = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
[数组使用]
: 数组元素可以通过索引(位置)来读取
-> 指针 ,取地址符 &,放到一个变量前使用就会返回相应变量的内存地址,指针变量指向了一个值的内存地址
-> 结构体 ,一旦定义了结构体类型,它就能用于变量的声明
[结构体定义]
: Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型
: struct 语句定义一个新的数据类型,结构体有中有一个或多个成员。type 语句设定了结构体的名称。
: type struct_variable_type struct {
member definition;
member definition;
...
member definition;
}
[结构体成员访问]
: 访问结构体成员,需要使用点号 . 操作符
: 结构体.成员名
-> 切片(Slice) - 对数组的抽象,切片(“动态数组”), 与数组相比切片的长度是不固定的,可以追加元素
[切片定义]
: 声明一个未指定大小的数组来定义切片 , 切片不需要说明长度 ,
: var identifier []type
: 使用make()函数来创建切片
: var value_slice1 []type = make([]type, len)
: value_slice1 := make([]type, len)
[切片初始化]
: []表示是切片类型
: value_slice1 :=[] int {1,2,3}
: 切片是可索引的,并且可以由 len() 方法获取长度
: 切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少
-> 范围(Range)
-> 集合(Map)