高质量编程与性能调优实战| 青训营

84 阅读2分钟

3.1 高质量编程

3.1.1 代码格式

gofmt与goimport:

go fmt 是 Go 语言中的一个工具命令,用于格式化代码。它的作用是自动调整代码的排版和格式,使代码风格符合 Go 语言官方的编码规范。

goimport:自动增删依赖包的引用,将加依赖包按字符顺序排列并分类。

配置:

GoLand设置gofmt和goimports代码格式化 - 米虫 - 独立博客 - 做一个有理想的米虫 - www.mebugs.com​www.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指定大小。