高性能编程与调优 | 青训营笔记

90 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

高质量编程

简介

image-20220519161346525

image-20220519161832102

image-20220519162019166

代码格式

image-20220519162101346

注释

image-20220519162358501

image-20220519162447689

image-20220519162526549

image-20220519162601894

image-20220519162700113

image-20220519162734657

image-20220519162835788

命名规范

image-20220519165735033

image-20220519165749553

image-20220519165755271

image-20220519170611845

image-20220519170640565

控制流程

image-20220519170907433

image-20220519170920112

image-20220519170945150

image-20220519171028122

错误和异常处理

image-20220519171034530

image-20220519171100099

image-20220519171233092

image-20220519171238236

image-20220519171304580

image-20220519171354733

image-20220519171401000

image-20220519171416219

编程原则:
	简单性:需要以简单清晰的逻辑编写代码
	可读性:编写可维护的代码第一步就是确保代码可读
	生产力:保证团队整体工作效率

代码格式:
	gofmt代码格式推荐使用官方提供的工具,可以统一go语言编码风格,常见的IDE都可以支持该项的配置
	goimports,也是官方提供的工具,相当于gofmt加上依赖包管理,自动增删依赖的包引用、将依赖包按字典序排序并分类
	
注释:
	
	
命名规范:
	变量:
	
	函数:
	包:

控制流程:
	避免嵌套
	尽量保持正常代码路径为最小缩进
错误链:

	

规范

image-20220519171548632

image-20220519171623411

优化建议

image-20220519171632970

image-20220519171657465

image-20220519171736410

image-20220519171742259

image-20220519171808183

image-20220519172340103

image-20220519172356575

image-20220519172415740

image-20220519172434399

image-20220519172446267

image-20220519172510947

image-20220519172557760

image-20220519172632747

image-20220519172642663

image-20220519172725230

image-20220519172747272

image-20220519172808972

image-20220519172829529

benchmark命令

slice扩容
slice引用

map扩容

strings.Builder

空结构体

atomic包

性能调优

简介

image-20220519201822217

分析工具pprof

image-20220519201942856

image-20220519204838062

image-20220519202028099

CPU

image-20220519204852632

image-20220519204932499

image-20220519210821743

image-20220519210836023

image-20220519210840998

image-20220519210849059

Heap

image-20220519205027371

image-20220519210908658

image-20220519210915471

image-20220519210925052

image-20220519210931689

Goroutine

image-20220519205033675

image-20220519210939872

image-20220519210946879

image-20220519210951912

image-20220519210957061

Mutex

image-20220519205110287

image-20220519211003123

image-20220519211009365

调优案例

image-20220519205303654

image-20220519205322599

image-20220519205417147

image-20220519205520500

image-20220519205635720

image-20220519205656671

image-20220519205731670

image-20220519205739199

image-20220519205929319

image-20220519210111327

image-20220519210208046

image-20220519210319424

image-20220519210454513

image-20220519210545846




使用库不规范,json解析库不规范
日志记录问题

高并发与低并发对比


重点位置调优之后,重点关注对同一个请求的响应有哪些不一样的地方,保证程序运行的正确性


在重点位置优化之后,可以从整体情况来分析,查看可不可以更进一步优化


在确保代码正确性的基础上,分析基础库,查看基础库是否有进一步优化的地方,如果有更高性能的基础库可以考虑进行更换

编译器优化,如果有更好的编译器,可以使用更好版本的编译器

性能调优要依靠数据而不是猜测
性能调优需要确保正确性