golang实战笔记
一、集合类型
1.值指针和引用类型
a、go语言变量持有相应的值,列外:通道、函数、方法、映射以及切片的引用变量持有的都是引用,以即保存指针的变量。
b、函数或者方法的参数是值传递,即传递的值会被复制一次,因此:
对于布尔变量和数值类型的参数来说,很廉价,每个变量占1~8个字节;
按字符串传也廉价,64位机器16字节,32位机器8字节;
数组代价很大,使用切片替代;
注意:通过使用指针,我们可以让参数的传递成本最低,并且可修改;指针亦可以指向引用类型,但只对切片有用2. new(Type) === &Type{}
两种语法都分配了一个Type类型的值,同时返回一个指向该值的指针;使用大括号的有点,可以为其指定初始值-
3. 数组和切片
a、数组:是一个定长的序列,其中元素类型相同,使用 [] 声明,创建语法如下:
[length]Type 只声明 eg: var buffer [20]byte
[N]Type{value1,value2,...,valueN} 声明并初始化
[...]Type{value1,value2,...,valueN} 自动推断其长度var buffer [20]byte //只声明 names := [5]string{"sampson", "jiny"} //声明并赋初始值 cities := [...]string{"guiyang", "hangzohu", "shanghai"}
b、切片,可以调整长度,是基于素组创建的(即创建切片时会创建一个隐式的素组,在基于隐式素组操作创建切片),创建语法如下:
使用make关键字创建:
make([]Type, length, capacity)
make([]Type, length)
正常创建:
[]Type{}
[]Type{value1,value2,...,valueN}
注意:[]type{} 和 make([]Type, 0)等价
切片的常用操作【s为字符串或数组】:s[n] //切片s中索引位置为n的项 s[n:m] //从切片s的索引位置n到m-1处所获得的切片 s[n:] //从切片s的索引位置n到len(s)-1处所获得的切片 s[:m] //从切片s的索引位置0到m-1处所获得的切片 s[:] //从切片s的索引位置0到len(s)-1处所获得的切片,即复制一个切片 cap(s) //切片s的容量:总是>=len(s) len(s) //切片s中所包含项的个数:总是<= cap(s) s[:cap(s)] //增加切片s的长度到其容量,如果两者不同的话
遍历切片: for range
修改切片:
s: = []string{"a","b","c","d", "e"}
t: = []string{ "k","l"}
u := []string{"m", "n"}
s := append(s, "h", "i", "j") //添加单一的值
s := append(s, t...) //添加切片中的所有值
s := append(s, u[1:]...) //添加子切片
letter := 'SYZ'
b := []byte{"a", "b"}
b = append(b, letter...) //将一个字符串字节添加进一个字节切片
copy(a, b)函数 ,a、b必须是同一类型的切片
切片的排序和搜索:sort包
-
4.映射
映射是一种内置的数据结构,保存键-值对的无序集合,它的内容只受内存的限制
a、创建//使用make创建 make(map[keyType]valueType, inititalCapacity) make(map[keyType]valueType) //正常创建 map[keyType]valueType{} map[keyType]valueType{key1: value1, key2: value2, ... , keyN: valueN}
b、操作
m[k] = v //映射赋值
Delete(m, k) //删除映射某个键值对
v := m[k]
v, found := m[k] //检查某个映射值是否存在,found为bool值,存在为true和不存在为false
len(m) //映射m中的项数目
d、遍历
order := map[string]string{"goodsName" : "yundognxxie", "description": "这鞋很不错"}
for k,v := range order {}
-
**5.案例 **
//todo
有疑问加站长微信联系(非本文作者)