首页 > 其他分享 >《Go 精进之路》 读书笔记 (第一次更新)

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

时间:2022-09-27 21:57:45浏览次数:61  
标签:map 精进 string 读书笔记 切片 字符串 类型 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

标签:map,精进,string,读书笔记,切片,字符串,类型,Go,字节
From: https://www.cnblogs.com/linxiaoxu/p/16736154.html

相关文章

  • golang map 和 interface 的一些记录
    golang的map读取是不需要判断key是否存在的,不存在的key会返回默认值。如果map的value是interface,那么interface是需要先进行类型转换的,非要求类型的转换,得到结果是nil。......
  • mac 安装go
    参考https://www.cnblogs.com/little-baby/p/16574114.htmlhttps://blog.csdn.net/UberSoldier/article/details/123114927......
  • 【Django-rest-framework框架】第03回 序列化类字段与高级用法
    目录1.序列化类常用字段与字段参数1.1常用字段类型1.2选项参数1.3通用参数2.序列化类高级用法之sourse2.1source可以指定序列化表中得哪个字段2.2source如果是方......
  • Golang-常用算法
    快速排序funcQuickSort(sort[]int)[]int{ iflen(sort)<=1{ returnsort } low:=make([]int,0,0) mid:=make([]int,0,0) high:=make([]int,0,0......
  • mongoose连接collections会自动加s的问题解决
    问题的解决:设置mongoose.model()的第三个参数,代码如下。module.exports=mongoose.model('Course',userSchema,'course');或者,可以给Schema传入第二个参数,......
  • MongoDB安装使用教程
    MongoDB安装使用教程介绍MongoDB是一个基于分布式文件存储的数据库,是一个文档数据库,支持的数据结构非常松散,是类似json的bson格式,可以存储比较复杂的数据类型。下载......
  • 【Golang】PHP转Go强大的工具库
    PHP的朋友应该会被PHP中两大特性折服:1、强大的array,一切皆Array;2、强大的函数库,函数类型非常丰富。一、简单示例1、例如:md5函数Go版本写法:packagemainimport......
  • django项目 数据migrate迁移成功 数据库未生成表 表现:Running migrations: No mig
    现象:python pythonmanage.pymigrate后提示:Runningmigrations:  Nomigrationstoapply.解决方法: 找到相应数据库的数据库表django_migrations,之后有一个app字......
  • 《软件测试的艺术》读书笔记(五)
    第5章模块(单元)测试对于完全没有编程基础的人来说,第五章和第四章一样难懂。不过好在都是比较简单明了的单词和运算符号组成的,差不多也能猜到是什么意思。作者同样使用......
  • 【Golang】关于Golang中一些优秀的类库
    一、CLI命令(spf13/cobra)GitHub地址:https://github.com/spf13/cobra Cobra既是一个创建强大的现代CLI应用程序的库,也是一个生成应用程序和命令的程序。可以使用这个......