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

43 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

1.2代码编写规范

①注释

什么时候需要使用:

       公共符号始终需要注释、复杂函数需要对功能进行注释、

怎么注释:

       解释代码如何做的,为什么这样做(给出额外上下文信息,解释代码实现的原因),解释代码什么情况下会出错(解释代码的限制条件)

总结:代码本身带有很多信息,注释的目的是给出额外信息,帮助理解;

②命名

       变量variable命名要点:简洁、缩略词需大写、变量距离使用的地方越远越需要携带更多信息;

       函数func命名要点:简短、包名已携带的信息则函数命名不必再携带(如http.serve和http.serveHTTP这两者中,http包携带有信息,则函数命名直接用serve即可)

       包命名package要点:全小写字母、简短并包含上下文信息、不能与标准库同名

③控制流程

线性原则避免嵌套、尽量不要嵌套很多判断(使得代码不断缩进,冗长)导致代码复杂、提升代码可维护性和可读性。  

④错误

errors.New 

1.3性能优化

①slice预分配内存

避免后续多次分配内存。Slice使用频率比较高,多次分配对性能影响较大。

复用以前的slice时,应当使用copy替代re_slice,这可避免原本的slice不被释放导致内存占用过大

②map预分配内存

提前分配空间能够减少内存拷贝和Rehash的消耗,提升运行速度

③使用strings.Builder拼接字符串

strings.Builder采用内存扩容策略,不需要每次拼接重新分配内存,因此拼接字符串效率最高

④使用空结构体节省内存(提升空间利用效率)

空结构体struct{}不占用内存空间,可以作为各种场景下的占位符使用,能够节省资源。比如它可用于实现set,可以考虑用map替代。

⑤多线程时使用atomic包