Golang程序测试与性能优化

slide

Golang 代码质量管理

理想的项目状态:

性能测试

func BenchmarkItoa(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = strconv.Itoa(i) // op
	}
}

> go test -run $^ -bench Itoa -benchmem -cpu 2
BenchmarkItoa-2  20000000  66.8 ns/op  7 B/op  1 allocs/op

profile

GC 机制

GOGC 环境变量:

堆分配, 栈分配 ?

array vs slice

string vs []byte

struct

map

存值还是存指针?

理解 goroutine 调度


defer

channel

对象池 (object pool)

避免使用reflect

优化思路:

接口”短路”优化

“短路”: 基于接口间调用关系的实现的特化版本

例子:

提供不需要申请内存对象的接口

其他优化

Go调用汇编和C(CGO)

case study: fasthttp vs net/http

fasthttp 优化:

参考资料


写在最后的

HOME