《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

最新文章

  1. Maven编译jar出现:无法确定 T 的类型参数的异常的原因和处理方案
  2. photoshop切图介绍
  3. SQL Server中的事务日志管理(1/9):事务日志概况
  4. 未完成的任务之:下载、安装、体验 Gentoo
  5. 遍历Jenkins全部项目的配置
  6. 读取中兴3G告警log告警文件到集合
  7. 如何用webbrowser获取ajax动态生成的网页的源码?
  8. DenseNet 论文阅读笔记
  9. 全栈JavaScript之路( 二十二 )IE 专有扩展——文档模式
  10. 博客目录 Blog directory
  11. Angular 5项目
  12. Ruby 对多语言的支持
  13. 如何获得当前页的SITECORE上下文
  14. Avito Cool Challenge 2018(div1+2)
  15. ccf认证模拟题之三---最大的矩形
  16. 小米范工具系列之一:小米范 web查找器
  17. automake--关于两个文件configure.in和Makefile.am的编写
  18. Phonetic Symbols:2个半元音:[w] ,[j]
  19. 安卓获取输入法高度与ViewTreeObserver讲解
  20. 帮助小伙伴写的组装xml字符串类

热门文章

  1. VIM学习笔记-1
  2. PySide6/PyQt开发xml编辑器(1)
  3. Dubbo源码(一) - SPI使用
  4. Redis 08 地理位置
  5. SPI:Java的高可扩展利器
  6. 应用集成-在Hexo、Hugo博客框架中使用Gitalk基于Github上仓库项目的issue无后端服务评论系统实践
  7. 一、JDK和JRE
  8. df空间满,du找不到文件的问题
  9. 全链路追踪体验—最简陋TraceId的生成
  10. 第八十二篇:Vue购物车(三) 实现全选功能