Go语言 - 高质量编程与性能调优

1.高质量编程

边界条件考虑完备

异常处理

易读易维护

规范编码:

格式化代码格式

注释:解释作用,返回值,或是报错原因

命名:

缩略词大写,变量不需要导出时全小写

作用域小的变量命名尽量简洁

作用域广的变量,或是函数的形参命名要有上下文信息

函数名不要携带包名上下文信息

控制流程:

冗余的else尽量省略

尽量保持代码最短缩进,例如

if err := doSomething(); err != nil {
    return err
}

错误判定与输出日志

不建议业务代码中使用panic,尽量使用error

2.性能优化

Go语言提供了benchmark工具

执行语句为 go test -bench=. -benchmem

切片

slice预先分配 data := make([]type, 0, size),不声明size会导致append时不断扩容

map也是同理

在大切片上截取时,使用copy要比在切片上进行切片操作占用内存小的多

//占用内存大
fun do1(origin []int) []int {
    return origin[len(origin) - 2:]
}

//占用内存小
fun do2(origin []int) []int {
    res = make([]int, 2)
    copy(res, origin[len(origin) - 2:])
    return res
}

字符串处理

拼接处理来看, stringbuilder, bytebuffer 要比 + 快很多

+会重新开辟内存空间

stringbuilder, bytebuffer底层都是[]byte数组

空结构体

可以节省内存

3. 性能分析工具pprof(p-prof)

具体可参考golang pprof 实战 | Wolfogre's Blog

帮助了解消耗了多少cpu,memory,支持可视化与性能分析

实战练习

git clone https://gitclone.com/github.com/wolfogre/go-pprof-practice

启动项目后键入网址:

http://localhost:6060/debug/pprof/

界面如下

cpu

打开命令行,键入

go tool pprof "http://localhost:6060/debug/pprof/profile?second=10"

得到

 接下来,执行语句

top

得到

flat:运行耗时 cum : 调用其他+运行总耗时

flat%:运行占用cpu百分比 cum%: 调用其他+运行占用cpu百分比

我们可以看到,eat函数最耗时,看看他有什么问题?

list Eat

 原理是for循环占用时间过长

那我们把他注释掉

再来看看top结果

 

没有刚才那么长了 

使用命令web即可可视化,需安装graphviz并配置path

堆内存

键入命令

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"

发现这个mouse.steal占用内存真的是高

老规矩,注释掉

 

 协程

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"

火焰图是动态的

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"

阻塞

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值