今天的学习内容时关于GO性能优化的问题。 今天的讲师讲的关于GO在项目实操过程中的各种优化案例可以说是目前来说我见过的最好的了,以下我从几个方面说明一下
1,GO语言在编程过程都要注意的问题:
- 简单性(以能理解并运行为第一要素,拒绝冗杂的代码,以简单清晰的逻辑编辑代码)
- 可读性(代码是写给人看的,不是机器,不要追求过于花哨的代码)
- 生产力(对于团队的配合是十分重要的,要能够高性能的完成整个项目)
2.编码的规范
- 代码格式:实际开发过程中需要有规范的代码格式,不然容易引起歧义
- 注释:对于每行代码需要有自己的注释,以防同事看不懂或自己忘记代码实际含义
- 命名规范:规范的命名才能使开发效率更高效,不然容易花费更多的时间在名字歧义上
- 控制流程:故障问题通常出现在条件语句和分支循环中,所以不建议在实际开发中使用复杂的嵌套控制流程语句
- 错误和异常处理:error尽量提供简明的上下文信息,团队开发过程才不会出现一看不知道的问题。panic用于真正的异常情况。recover只在当前的goroutine和defer中生效,注意时机
3.性能优化建议
1.可以使用benchmark来优化
func Fib(n int){
if n<2 {
return n
}
return Fib(n-1)-Fib(n-2)
}
func benchmark(b *testing.B) {
for i := 0; i < b.N; i++ {
Fib(10)
}
}
2.slice预分配内存 3.map预分配内存 4.使用string.builder字符串处理
func plus(n int ,s string)string{
str:=""
for i := 0; i < n; i++ {
str+=s
}
return s
}
func stringbuilder(n int ,s string)string{
builder := strings.Builder
for i := 0; i < n; i++ {
builder.WriteString(s)
}
return builder.String()
}
# ```
# 5.性能分析工具
根据课程的最后可以看到可以使用pprof性能排查来查出开发过程中还有可以优化的要点。
也可以在goroutine和mutex锁中排查出结果
prrof工具可以实现的功能有:
- 1.tool
- routine/pprof
- net
- 2.sample
- cpu
- 堆内存
- 协程
- 锁
- 阻塞
- 线程创建
- 3.profile
- 网页
- 可视化终端