[ 高质量编程与性能调优 | 青训营笔记 ]

77 阅读2分钟

[ 高质量编程与性能调优 | 青训营笔记 ]

这是我参与「第五届青训营」伴学笔记创作活动的第 3 天

零、前言:

记个笔记顺便(恰青豆还是有很多不完善也有可能对的地方还请大佬们指正

一、本堂课重点内容:

  • 高质量编程

    • 编程原则
    • 编码规范
    • 注释及命名
    • 控制流程
    • 错误及异常处理
  • 性能调优实战

    • 调优结构
    • pprof

二、详细知识点介绍:

3.1 编程原则

    简单性,可读性,生产力

3.2 格式化代码

    gofmtgoimports 在Goland的go工具 -> tool里面

    Ctrl+Alt+L 可以快速缩进 这两个大部分效果差不多。。

3.3 代码注释

    需要提供-外部因素,上下文,限制条件

    公共符号要注释,但不需要注释实现接口的方法

    解释代码什么情况会出错

    命名上缩略词全大写但是位于开头不需要,并且要考虑上下文信息

  • 使用ServeHTTP而不是ServeHttp
  • 使用XMLHTTPRequest而不是xmlHTTPRequest
3.4 控制流程

    尽早返回,最少嵌套

3.5 错误及异常处理

    优先使用 errors.New 来创建匿名变量,如果有格式化需求,使用 fmt,Errof

    在 fmt.Errorf 中使用 %w 将一个错误关联至错误链中

    recover() 函数可以让进入宕机 (panic) 流程中的 goroutine 恢复过来,recover 仅在延迟函数 defer 中有效,捕获当前panic就不会向上传递。在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果

    defer 后进先出

3.6 结构调优
go test -besh=. -benchmem   #基准性能测试 

    对于 slice map 尽可能预先分配内存

    使用 atomic 包来优化锁

3.7 pprof

    pprof GitHub - google/pprof: pprof is a tool for visualization and analysis of profiling data

    实战 GitHub - wolfogre/go-pprof-practice: go pprof practice.

采样数据

  • allocs:内存分配情况
  • blocks:阻塞操作情况
  • cmdline:程序启动命令及
  • goroutine:当前所有goroutine的堆栈信息
  • heap:堆上内存使用情况(同alloc)
  • mutex:锁竞争操作情况
  • profile: CPU占用情况
  • threadcreate:当前所有创建的系统线程的堆栈信息
  • trace:程序运行跟踪信息

  terminal中输入命令go tool pprof + <采样链接>来启动采样

    例如:go tool pprof -http=:8083"http://localhost:6060/debug/pprof/profile?seconds=10"

三、总结:

    学习了代码规范,回头还是要亲手试一试pprof