这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
golang 高质量代码编写
高质量代码第一步,多写注释
高质量代码第二步,命名要规范
-
变量命名
- 简短但不简洁
- 缩略词要大写,例如 TTL 不能写成 Ttl
- 若是使用范围广泛,尽量添加上下文信息,例如
userName不能简写成name,应该给出name的上下文
-
方法命名
- 尽量简短,见名知意
- 返回结果为与包名一致的类型,则不需要后面加上类型信息,例如
time包下的Now()方法 不用写成NowTime()。效果==>time.Now() - 如果返回的结果的类型与包名不一致,则需要加上类型信息,例如
strconv.ParseInt()
-
package命名
- 只由小写字母构成
- 不能与常用的库同名,因为别的地方也会调用
- 简短但不简洁,包含上下文信息
高质量代码第三步,学会控制流程
把会发生 error 的场景前移,且尽量减少嵌套,避免回调地狱
例如校验用户的注册信息,在最后返回正常,前面有错误的情况都提前返回,下面是示例代码
func register(userAccount,userPassword string) error{
if len(userAccount) < 6 {
errors.New("账号长度不小于6位")
}
if len(userPassword) < 8 {
errors.New("密码长度不小于8位")
}
//更多,视实际业务场景
...
return nil
}
注意判断条件时尽量把耗时短的条件前置。比如需要从数据库中查询是否有当前账号,数据库的查询需要的耗时比较长,应该后置这种判断,在耗时短的判断不成立时返回 error ,而不是先执行耗时长的判断。
高质量代码第四步,性能优化
- 在初始化 slice 和 map 时应该预分配大小,避免在后续过程中一直申请内存,额外增加时间浪费。但也不应追求不申请扩容带来内存的浪费。
- 字符串拼接可以使用
strings.Builder来提升运行效率,是因为 golang 中string是引用类型,是不可变的,在进行字符串拼接时会开辟新的内存空间,而strings.Builder的底层用的是byte数组,有自己的内存扩容策略,不需要每次拼接重新分配内存。 - 可以使用空结构体
struct{}进行占位,例如map中只需要key而不需要value,这时候就能给value赋值struct{}减少内存的浪费