golang复合类型总结

golang复合类型总结
指针类型,数组,切片,map和结构体  

指针:
指针就是地址
var p *int
a=1
p = &a
*p = 999 相当于a=999
指针必须有一个合法的指向才能调用赋值等                      new关键字和make关键字留意一下。new之后不需要释放,自动的gc
值传递和指针传递的区别---值传递是拷贝一份,指针则是指向其内存

数组:(同一个类型的集合)
必须指定长度,并且长度是常量,索引下标为0,循环赋值         rand关键字(取6位的随机数),冒泡排序
数组做参数是值传递,指针类型的数组才是引用传递
优点:
1、按照索引查询元素速度快
2、能存储大量数据
3、按照索引遍历数组方便
缺点:
1、根据内容查找元素速度慢
2、数组的大小一经确定不能改变。
3、数组只能存储一种类型的数据
4、增加、删除元素效率慢
5、未封装任何方法,所有操作都需要用户自己定义。
6、数组的空间必须是连续的,这就造成数组在内存中分配空间时必须找到一块连续的内存空间。

数组缺点:大小固定,做完函数参数会全部拷贝一份
引入切片:
切片:弥补数组缺点—可以认为是一个动态数组(变长)
切片不指定数组前面那个长度  比如 a:=[]int{1,2}.数组指定长度,切片不指定。切片可以自动扩容,2倍的速度扩容
切片可以指定输出
my_array := []int{1,2,3,4,5}
slice := my_array[0:3:5]  //[low:hight:max] len=high - low cap = max-low  取0-3,最多取5个
这里的结果为:slice为1,2,3,len长度为3,cap为5                    留意append关键字
切片得截取
slice := my_array[6:] 
slice := my_array[:3]
slice := my_array[:]
slice := my_array[6]
普通切片不会改变底层数组,指针切片则会改变
同样的切片的值传递和指针的地址传递                                   留意copy关键字

map
Info:=map[键类型]值类型{1:“aa”} 
键是唯一的,函数,切片等不能做键值。容量自动扩充,打印顺序无序
Map做参数是引用传递的

结构体
有type和struct关键字,没有前面的变量的var关键字
将不同类型的数据组合成一个有机的整体
可以顺序初始化也可以指定初始化,顺序初始化需要全部赋值
指定初始化栗子:p2 := Student{name:"aa",addr:"北京"}

可见性需要留意一个首字母大写的问题


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值