这是我参与「第五届青训营 」伴学笔记创作活动的第 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替代。