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