• 《Go 精进之路》 读书笔记 (第一次更新)


    《Go 精进之路》 读书笔记。简要记录自己打五角星的部分,方便复习巩固。目前看到p120

    Go 语言遵从的设计哲学为组合

    垂直组合:类型嵌入,快速让一个类型复用其他类型已经实现的能力,实现功能的垂直扩展。

    水平组合:接口实现鸭子类型。


    变量名字中不要带有类型信息

    userSlice []*User [BAD]
    users []*User [Good]
    

    编程语言命名的管理:保持变量声明与使用之间的距离越近越好,或者在第一次使用变量之前声明该变量。就近原则


    接口使用

    尽量定义小接口,并通过接口组合的方式构建程序。


    无类型常量

    无类型常量拥有字面值的特性,在参与变量赋值和计算过程时无需显式进行转换。

    无类型常量也拥有自己的默认类型(用于赋值确定无类型变量、接口变量的类型)


    const 聚类声明

    每行隐式重复前一个非空表达式。iota 也是无类型常量(维护枚举常量列表更容易


    零值可用

    像切片,sync.mutex等的结构体为零值可用状态。使用者可以省略初始化直接使用绑定的相关方法。

    零值可用的类型需要注意尽量避免值复制,可以传递指针


    描述符

    切片是数组的描述符

    hmap是map的描述符


    遍历map

    go运行时初始化map迭代器的时候会做随机处理,因此不要依赖遍历map得到的元素次序。可以将key存储在一个切片里再循环拿key遍历map输出。


    不要获取map数据元素地址

    map可以自动扩容,当overflow buckets过多或存储元素过多会造成“扩容”。导致原来元素被搬迁至新地方。


    字符串是通过切片构造的,然后切片被回收

    字符串的结构为 {str 指向底层字节数组,len 长度}

    直接将string类型通过函数、方法传入不会有太多损耗,因为传入的仅仅是一个描述符,而不是字符串数据。


    多使用string.Builder或strings.Join

    做了预初始化的strings.Builder连接构建字符串效率最高。如果多个字符串是以[]string承载的,那么用strings.Join构建字符串其平均性能最稳定。


    直接使用切片的底层存储当成string的底层节省内存分配操作

    • string(字节切片)用在map的key中
    • string(字节切片)用在字符串连接语句中
    • string(字节切片)用在字符串比较中

    for range 中转换字符串为字节切片节省内存分配操作

    for _,v := range []byte("直接使用字符串的底层字节数组"){
    
    }
    

    尽量使用预估的大小创建

    • 创建map
    • 创建切片
    • 创建strings.Builder
    • 创建bytes.Buffer

    __EOF__

  • 本文作者: 小能正在往前冲
  • 本文链接: https://www.cnblogs.com/linxiaoxu/p/16736154.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Scala入门到放弃—03—面向对象
    PostCSS
    Python中的类说明
    Postman(5): postman持久化保存
    [SUCTF 2019]EasySQL1 题目分析与详解
    设计模式学习笔记(四)单例模式的实现方式和使用场景
    一些资源收集
    麦芽糖-刀豆球蛋白A,maltose-ConcanavalinA,刀豆球蛋白A-PEG-麦芽糖
    DGIOT平台基本功能介绍——物模型及指令通道相关部分介绍
    LeetCode 6138. 最长理想子序列 动态规划
  • 原文地址:https://www.cnblogs.com/linxiaoxu/p/16736154.html