stkevintan / kirk-blog

kirk-blog test
1 stars 0 forks source link

Go实战读书笔记 #2

Open stkevintan opened 5 years ago

stkevintan commented 5 years ago
  1. 命名接口的时候,也需要遵守Go语言的命名惯例。如果接口类型只包含一个方法,那么这个类型的名字以er结尾。

  2. 通道用完尽量关闭,否则会阻塞for ret range chan1{}之类的语句

  3. 切片还有第三个参数: slice[i:j:k]代表长度为j-i ,容量为k-i

  4. 设置切片容量和长度相等的好处:

    // 创建字符串切片
    // 其长度和容量都是5个元素
    source := []string{"Apple", "Orange", "Plum", "Banana", "Grape"} 
    // 对第三个元素做切片,并限制容量
    // 其长度和容量都是1个元素
    slice := source[2:3:3] 
    // 向slice追加新字符串
    slice = append(slice, "Kiwi")

    如果不加第三个索引,由于剩余的所有容量都属于slice,向slice追加Kiwi会改变原有底层数组索引为3的元素的值Banana。不过在代码中我们限制了slice的容量为1。当我们第一次对slice调用append的时候,会创建一个新的底层数组,这个数组包括2个元素,并将水果Plum复制进来,再追加新水果Kiwi,并返回一个引用了这个底层数组的新切片

  5. range创建了每个元素的副本,而不是直接返回对该元素的引用

  6. 一个切片需要24字节的内存:指针字段需要8 字节,长度和容量字段分别需要8字节