这是我参与「第五届青训营 」伴学笔记创作活动的第4天
一、重点内容:
- 本次主要对高质量编程与性能调优的内容进行了预习。
- 高质量编程主要针对的是编码规范和性能优化
- 性能调优主要是通过性能分析工具进行业务和语言优化。
二、详细知识点介绍:
- 代码注释建议
- 不要创建自定义上下文类型或使用上下文以外的接口函数签名。如果有要传递的应用程序数据,请将其放在参数中,在接收器中,在全局变量中,或者,如果它确实属于那里,则在上下文值中。
- 声明空切片。设计接口时,避免区分nil片和非nil的零长度片。
- 文档注释方面
- 其余内容可以参考:代码审查评论 ·golang/go Wiki (github.com)
- test命令
- 首先需要创建一个后缀名为_test.go的文件。
- 实现测试函数。
- 运行go test进行测试。
- 参考添加测试 - Go 编程语言
- -bench参数进行性能测试
- func BenchmarkXxx(*testing.B)被视为基准测试,通过go test -bench执行。
- go test还支持模糊测试,它是使用随机生成的输入调用函数以查找错误,定义为func FuzzXxx(*testing.F)。
三、实践练习例子:
- 采用github.com/wolfogre/go… 的例子进行实践测试。
- 项目组织结构如图所示:
- 主函数代码如下
package main
import (
"log"
"net/http"
_ "net/http/pprof"
"os"
"runtime"
"time"
"github.com/wolfogre/go-pprof-practice/animal"
)
func main() {
log.SetFlags(log.Lshortfile | log.LstdFlags)
log.SetOutput(os.Stdout)
runtime.GOMAXPROCS(1)
runtime.SetMutexProfileFraction(1)
runtime.SetBlockProfileRate(1)
go func() {
if err := http.ListenAndServe(":6060", nil); err != nil {
log.Fatal(err)
}
os.Exit(0)
}()
for {
for _, v := range animal.AllAnimals {
v.Live()
}
time.Sleep(time.Second)
}
}
- 运行结果如图所示:
- 加入了一个dog类的测试结果
四、课后个人总结:
-
该课程不仅仅适用于Go语言,而是适用于整个职业。要写好代码,这部分知识是不可或缺的。学习这部分内容扩展了我的知识面,以前对如何写好代码没有什么头绪,只能模仿他人的风格,经过稍微系统的学习后确实受益匪浅。
-
Talk is cheap,write your code. 这句话确实是真理,光看是不够的,只有足够的训练才能真正掌握一个技术。