3.1 高质量编程
3.1.1 代码格式
gofmt与goimport:
go fmt 是 Go 语言中的一个工具命令,用于格式化代码。它的作用是自动调整代码的排版和格式,使代码风格符合 Go 语言官方的编码规范。
goimport:自动增删依赖包的引用,将加依赖包按字符顺序排列并分类。
配置:
GoLand设置gofmt和goimports代码格式化 - 米虫 - 独立博客 - 做一个有理想的米虫 - www.mebugs.comwww.mebugs.com/post/gofmti…
3.1.2 注释
对自己定义的函数要加以注释;对代码中相对复杂的内容加以解释说明;解释代码中某些参数的设计,比如说为什么这样做,这些参数是需要读者花费时间从上下文花时间去理解的;解释一下代码的限制条件,在什么情况下会出错;
对公共符号始终要注释;
3.2 性能优化
需要通过基准测试来查看性能,要创建基准测试,必须满足以下条件:
- 测试函数需要位于 *_test 文件中。
- 函数名称必须以 Benchmark 开头。
- 函数必须接受 *testing.B 作为唯一形参。
- 测试函数必须包含一个 for 循环(以 b.N 为其上限)。
package main
import (
"math/rand"
"testing"
)
var ServerIndex [10]int
func InitServerIndex() {
for i := 0; i < 10; i++ {
ServerIndex[i] = i + 100
}
}
func Select() int {
return ServerIndex[rand.Intn(10)]
}
// 对Select做一个基准测试
func BenchmarkSelect(b *testing.B) {
InitServerIndex()
b.ResetTimer()
for i := 0; i < b.N; i++ {
Select()
}
}
func BenchmarkSelectParallel(b *testing.B) {
InitServerIndex()
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
Select()
}
})
}
3.2.1 Slice 预分配内存
执行结果:
goos: windows
goarch: amd64
pkg: go-day/lesson3
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkPreAlloc
BenchmarkPreAlloc-12 30412237 40.26 ns/op
PASS
Process finished with the exit code 0
我们在data:=make([]int,0,size),这句代码中,如果不定义size的大小,就会创建出一个没有定义容量大小的数组,那么它对内存的占用会比较大。所以我们使用size指定大小。