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

88 阅读2分钟

1.编程

高质量编程遵循着大致的原则。

1.1简单性

消除“多余的复杂性”,以简单清晰的逻辑写代码

1.2可读性

代码是写给人看的而不是机器看的,编写可维护的代码的第一步是确保代码可读

1.3生产力

团队整体工作效率非常重要

2.命名

2.1 变量的命名

缩略词全部大写,但当其位于变量开头而且不需要导出时,需要全小写 例如ServeHTTP而不是用ServeHttp 使用XMLHTTPRequest或者xmlHTTPRequest 全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义

2.2 函数的命名

函数名尽量不携带包名的上下文信息,因为包名和函数名总是成对出现的 当名为foo的包的某个函数返回类型foo时,可以省略类型信息而不导致歧义

2.3 包的命名

只由小写字母组成。不包含大写字母和下划线等字符。 简短并包含一定的上下文信息。例如 schema、task ,不要与标准库同名。

3.错误捕获

3.1简单错误

简单的错误指的是仅出现一次的错误,而且在别的地方可以不用捕获该错误 优先使用errors.new(“error ”)这样的来处理简单错误 如果有格式化的要求则使用fmt.Errorf

3.2 defer

    func test() {
	if true {
		defer fmt.Println("1")
	} else {
		defer fmt.Println("2")
	}
	defer fmt.Println("3")
}

输出的结果是:3 1 先进到了1所对应的defer中,然后最后进到了3所对应的defer中,根据后进先出原则,先执行3,再执行1

4.性能优化

4.1工具 Benchmark

在终端中执行 go test -bench=. -benchmen 启动

4.2 map

在向map中填充数据的时候,map会不断扩容,如果我们提前对map中的内存进行预分配,可以减少内存拷贝和rehash的消耗。

data := make(map[int]int)
data := make(map[int]int,size)

4.3 stringbuilder

    func addStr_sec(n int, str string) string {
	builder := strings.Builder{}
	for i := 0; i < n; i++ {
		builder.WriteString(str)
	}
	return builder.String()
}


4.4 空结构体

空结构体struct实例不占据任何的内存空间。 可作为任何场景下的占位符使用. 节省资源,不占据任何的内存空间,同时也具有很强的语义,仅作为占位符