《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
《Go 精进之路》 读书笔记 (第一次更新)的更多相关文章
- 《Java并发编程实战》读书笔记(更新中)
一.简介 1.多线程编程要注意的几点: 安全性:永远不发生糟糕的事情 活跃性:某件正确的事情最终会发生(不会发生无限循环或者死锁) 性能:正确的事尽快发生(上下文切换消耗之类的) 二.线程安全 1.为 ...
- 《深入理解Java虚拟机:JVM高级属性与最佳实践》读书笔记(更新中)
第一章:走进Java 概述 Java技术体系 Java发展史 Java虚拟机发展史 1996年 JDK1.0,出现Sun Classic VM HotSpot VM, 它是 Sun JDK 和 Ope ...
- View Programming Guide for iOS_读书笔记[正在更新……]
原文:View Programming Guide for iOS 1 Introduction 先熟悉一下基本概念. Window Windows do not have any visible c ...
- <低风险投资之路>读书笔记
书在这里 低风险才能高收益 大的投资收益回撤,是长期高复合收益率的最大杀手 要赚钱先不赔钱 选择合理的投资组合与合理的仓位 盈利的关键不是你买了什么,而是你买了多少.这就是仓位管理的技巧,在确定性盈利 ...
- 《C++ Primer 4th》读书笔记 序
注:本系列读书笔记是博主写作于两三年前的,所以是基于<C++ Primer>第四版的,目前该书已更新至第五版,第五版是基于C++11标准的,貌似更新挺多的.博主今年应届硕士毕业,如若过阵子 ...
- 《编程珠玑,字字珠玑》读书笔记完结篇——AVL树
写在最前面的 手贱翻开了<珠玑>的最后几章,所以这一篇更多是关于13.14.15章的内容.这篇文章的主要内容是“AVL树”,即平衡树,比红黑树低一个等次.捣乱真惹不起红黑树,情况很复杂:而 ...
- 《CLR Via C#》读书笔记,持续更新...
写了快5年代码了,一直都是使用别人发明的语言,别人发明的框架做快速开发,还从来没有真正深刻的学习过底层的一些东西,于是今年我打算读<CLR Via C#>这本书,认识一下C#的底层,我觉得 ...
- The Art of Multiprocessor Programming读书笔记 (更新至第3章)
这份笔记是我2013年下半年以来读“The Art of Multiprocessor Programming”这本书的读书笔记.目前有关共享内存并发同步相关的书籍并不多,但是学术文献却不少,跨越的时 ...
- 读书笔记|Windows 调试原理学习|持续更新
关于调试方面的学习笔记,主要来源于<软件调试>的读书笔记和梦织未来论坛的视频教程 1.调试器使用一个死循环监听调试信息. DebugActiveProcess(PID);while(TRU ...
随机推荐
- 04 MySQL_数据相关的SQL
字符编码问题: 如果使用Windows电脑SQL语句中写中文报错的话,通过以下指令解决 set names gbk; 判空NULL问题: 判值用=,判空用is xxx = 非空值; xxx is nu ...
- vivo官网APP全机型UI适配方案
vivo 互联网客户端团队- Xu Jie 日益新增的机型,给开发人员带来了很多的适配工作.代码能不能统一.apk能不能统一.物料如何选取.样式怎么展示等等都是困扰开发人员的问题,本方案就是介绍不同机 ...
- 基于ABP实现DDD--实体创建和更新
本文主要介绍了通过构造函数和领域服务创建实体2种方式,后者多用于在创建实体时需要其它业务规则检测的场景.最后介绍了在应用服务层中如何进行实体的更新操作. 一.通过构造函数创建实体 假如Issue的 ...
- C#Lambda表达式演变和Linq的深度解析
Lambda 一.Lambda的演变 Lambda的演变,从下面的类中可以看出,.Net Framwork1.0时还是用方法实例化委托的,2.0的时候出现了匿名方法,3.0的时候出现了Lambda. ...
- 对象数组的foreach循环操作和集合容器
ForEach标签可以循环数组,list,map集合 采用 foreach循环遍历 ,并每次循环允许执行一次回调函数 for (容器中元素类型 临时变量: 容器变量) { System.out.pri ...
- TensorFlow自定义训练函数
本文记录了在TensorFlow框架中自定义训练函数的模板并简述了使用自定义训练函数的优势与劣势. 首先需要说明的是,本文中所记录的训练函数模板参考自https://stackoverflow.com ...
- 基于Docker在Win10平台搭建Ruby on Rails 6.0框架开发环境
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_170 2020年,"非著名Web框架"–Ruby on Rails已经15岁了.在今年,Rails 6.0趋于 ...
- 用lambda表达式和std::function类模板改进泛型抽象工厂设计
- Apache DolphinScheduler 使用文档(5/8):使用与测试
本文章经授权转载,原文链接: https://blog.csdn.net/MiaoSO/article/details/104770720 目录 5. 使用与测试 5.1 安全中心(Security) ...
- C++ 一键关闭屏幕
Demo下载地址:http://pan.baidu.com/s/1vN4wF #include <windows.h> #include "resource.h" LR ...