array slice map channel interface struct json
array
数组为值类型。数组赋值和传值给另一数组拷贝其全部元素。
特别是,如果你传递数组给一个函数,它收到此数组的拷贝,不是指针。
数组长度必须是常量,且是其类型的一部分。[10]int 和 [20]int 是完全不同的类型。
支持 “==” “!=” 操作符,因为内存总是被初始化过的.
指针数组 [n]T, 数组指针 [n]T
返回数组长度 len(array) 和 cap(array)
slice
切片是引用类型,即如果赋值切片给另一个切片,它们都指向同一底层数组。
struct slice {byte* array; uintgo len; uintgo cap; }
len表示可用元素数量,读写不能草果该限制
cap 表示最大扩张容量,不能超出数组限制.
slice == nil ,len cap 结果都是0.
Append 可以改变slice的元素,切片自身(指针/长度/容量的运行太数据结构)是值传递.
通过初始化表达式钩子,可使用索引号 s1 := []int{0,1,2,8:100}
使用make创建,指定len 和 cap 值 s2 := make([]int,6,8)
省略 cap,相当于cap=len s3 := make([]int,6)
指针直接访问底层数组,退化成普通数组操作
1 | s := []int{0,2,3,4} |
[][]T ,元素类型为[]T
reslice ,基于已有slice创建新的slice对象,以便在cap允许范围内调整属性.
copy 在两个slice之间复制数据,长度以len小的为准,两个slice指向同一底层,允许元素区间重叠.
map
引用类型,哈希表.
将唯一键映射到值,键是用于在检索值的对象。 给定一个键和一个值就可以在Map对象中设置值。设置存储值后,就可以使用其键检索它对应的值了。
键必须是 持相等运算符 (==、!=) 类型, 如 number、string、 pointer、array、struct,以及对应的 interface。值可以是任意类型,没有限制
使用
make
函数来创建映射delete() 函数用于从映射中删除项目.它需要映射以及指定要删除的相应键.
1 | // 声明 |
interface 接口类型
一系列方法的集合, 实现了这些方法的具体类型 这个接口类型的实例.
空接口类型.接受任何类型的参数.
断言
类获取 interface{} 中的值接口实现依赖
判断两个类型的方法
,没有必要定义具体类型和它实现的接口之间关系. 尝试文档化和断言这种关系没有用.所以并没有通过程序强制定义.
断言
x.(T)
,x为interface{}类型;T是要断言的类型.举例:
1 | package main |
struct
1 |
|
结构体字面值
结构体比较 如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的.那样的话两个结构体将可以使用 == 或者 != 运算符进行比较.
结构体嵌入和匿名成员
Json
标准库
encoding/json
encoding/xml
encoding/asn1
一个json数组对应go的数组和slice.一个json对象是一个字符串到值的映射.
json对象可以用编写map类型和结构体
json.marshal(json), json.Unmarshal(data,&struct)
channel
其实是一个goroutine之间的通信方式.