IT评测·应用市场-qidao123.com

标题: Go语言上手(三) | 青训营笔记 [打印本页]

作者: 渣渣兔    时间: 2023-4-23 14:51
标题: Go语言上手(三) | 青训营笔记
高质量编程简介及编码规范

高质量:
编程原则
编码规范

公共符号始终要注释

例外:实现接口的方法不需要注释
格式化

使用gofmt(官方工具)自动格式化
注释

公共符号始终要注释·包中声明的每个公共的符号: 变量、常量、函数以及结构都需要添加注释 .任何既不明显也不简短的公 共功能必须予以注释 无论长度或复杂程度如何, 对库中的任何函数都必须进行注释
命名规范

变量

缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写
函数

函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的·函数名尽量简短 当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义 当名为foo的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息
package

以下规则尽量满足,以标准库包名为例
控制流程

避免嵌套
尽量保存为最小缩进
错误处理

简单错误

错误的Wrap和 Unwrap

·错误的Wrap 实际上是提供了一个error嵌套另一个error的能力,从而生成一个error的跟踪链 ·在 fmt.Errorf中使用:%w关键字来将一个错误关联至 错误链中
错误判定

panic

性能优化

benchmark工具

 
slice

提前指定大小
在大切片上创建小切片,使用copy代替
string

使用strings.builder 和java类似
空结构体

使用空结构体struct{}实列不占用空间
map

map 预分配内存分析
使用atomic 包

锁的实现是通过操作系统来实现,属于系统调用.atomic 操作是通过硬件实现,
效率比锁高sync.Mutex应该用来保护一段逻辑,不仅仅用于保护一个变量。
对于非数值操作,可以使用atomic.Value,能承载一个interface}
实战

直接拉取仓库
wolfogre/go-pprof-practice: go pprof practice. (github.com)
分析的博客:
golang pprof 实战 | Wolfogre's Blog
性能分析工具 pprof
项目目录
 
没有外部依赖,直接运行即可
保持程序运行,打开浏览器访问 http://localhost:6060/debug/pprof/,可以看到如下页面:
 
页面上展示了可用的程序运行采样数据,分别有:
类型描述备注allocs内存分配情况的采样信息可以用浏览器打开,但可读性不高blocks阻塞操作情况的采样信息可以用浏览器打开,但可读性不高cmdline显示程序启动命令及参数可以用浏览器打开,这里会显示 ./go-pprof-practicegoroutine当前所有协程的堆栈信息可以用浏览器打开,但可读性不高heap堆上内存使用情况的采样信息可以用浏览器打开,但可读性不高mutex锁争用情况的采样信息可以用浏览器打开,但可读性不高profileCPU 占用情况的采样信息浏览器打开会下载文件threadcreate系统线程创建情况的采样信息可以用浏览器打开,但可读性不高trace程序运行跟踪信息浏览器打开会下载文件,本文不涉及,可另行参阅《深入浅出 Go trace》 
命令行
  1. go tool pprof http://localhost:6060/debug/pprof/profile
复制代码
topN 查看占用最多的函数
[code](pprof) top
Showing nodes accounting for 8.91s, 98.67% of 9.03s total
Dropped 35 nodes (cum




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4