2021-03-29 go语言笔记(深入了解go-基本数据结构)

  1. 类型之间相互转化:在go语言中基本类型之间的相互转化只有显式转换,不想java有显式转化和隐式两种,即不能将一个int类型直接赋值给一个浮点型,就算式int32也不能赋值给int64,所有的转化都是需要显式语法说明的。

  2. 结构体的域在内存中是紧挨着排列的。如
    type Rect1 struct { Min, Max Point } type Rect2 struct { Min, Max *Point }
    也就说如果创建一个Rect1 结构类型的对象,对象中min 和 max在内存中会存放在相邻的空间,不会随机分配,不可预料的

  3. 字符串在Go语言内存模型中用一个2字长的数据结构表示。它包含一个指向字符串存储数据的指针和一个长度数据。因为string类型是不可变的,对于多字符串共享同一个存储数据是安全的。切分操作str[i:j]会得到一个新的2字长结构,一个可能不同的但仍指向同一个字节序列(即上文说的存储数据)的指针和长度数据。这意味着字符串切分可以在不涉及内存分配或复制操作。这使得字符串切分的效率等同于传递下标。

  4. 一个切片slice是一个数组某部分的引用。在内存中包含3个部分:第一部分是一个指向切片slice的第一个元素,第二部分是切片的长度,第三部分是切片的容量,切片的长度是下标的上限,切片的容量是切片分割操作的上限。

  5. 数组的slice并不会实际复制一份数据,它只是创建一个新的数据结构,包含了另外的一个指针,一个长度和一个容量数据。如同分割一个字符串,分割数组也不涉及复制操作:它只是新建了一个结构来放置一个不同的指针,长度和容量。

  6. 切片slice的自动扩容:扩容规则一:新的切片的大小当前且切片大小的两倍,则扩容大小为新的切片大小。扩容二:如果当前的切片大小小于1024,则新的切片为当前切片的两倍,如果大于1024,则为当前大小的1.25倍,知道满足需要。

  7. make和new的区别:make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。make函数是无可替代的,我们在使用slice、map以及channel的时候,还是要使用make进行初始化,然后才才可以对他们进行操作。

  8. 二者异同:所以从这里可以看的很明白了,二者都是内存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值);而new用于类型的内存分配,并且内存置为零。所以在我们编写程序的时候,就可以根据自己的需要很好的选择了。
    make返回的还是这三个引用类型本身;而new返回的是指向类型的指针。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值