高质量编码 | 豆包MarsCode AI刷题

46 阅读2分钟

1.1 高质量 高质量编码是编写的代码能够达到正确可靠、简介清晰的目标可称为高质量

满足以下几点

1简单性

2可读性

3生产力

1.2编码规范

1.2.2注释

1.2.1 代码格式

使用工具自动格式化代码: gofmt

1.2.2注释

1解释代码作用

2解释代码如何做的

3解释代码实现的原因

4解释代码什么情况会出错

1.2.3命名规范

1简洁剩余冗长

2缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写

例如:ServeHTTP而不是ServeHttp XMLHTTPRequest或xmlHTTPRequest

3变量距离其被使用的地方越远,则需要携带越多的上下文信息

1.2.4控制流程

避免嵌套,保持正常流程清晰

正常流程代码沿着屏幕向下移动

提升代码可维护性和可读性

故障问题大多出现在复杂的条件语句和循环语句中

1.2.5错误和异常处理

(1)简单错误

1.简单的错误指的是仅出现一次的错误,且在其他地方不需要捕获该错误

2.优先使用errors.New来创建匿名变量来直接表示简单错误

3.如果有格式化的需求,使用fmr.Errorf

(2)错误的Wrap和Unwrap

1.错误的Wrap实际上是提供了一个error嵌套另一个error的能力,从而生成一个error的跟踪链

2在fmt.Errorf中使用:%w关键字来将一个错误关联至错误链中

(3)错误判定

判定一个错误是否为特定错误,使用error.Is

不同于使用==,使用该方法可以判断错误链上的所有错误是否含有特定的错误

在错误链上获取特定种类的错误,使用error.As

**(4)Panic **

不建议在业务代码中使用panic

调用函数不包含recover会造成程序崩溃

若问题可以被屏蔽或解决,建议使用error代替panic

当程序启动阶段发生不可逆的错误时,可以在init或main函数中使用panic

(5)recover

recover只能在被defer的函数中使用

嵌套无法生效

只在当前goroutine生效

defer的语句时后进先出

如果需要更多的上下文信息,可以recover后在log中记录当前的调用栈

小结

erro尽可能提供简明的上下文信息链,方便定位问题

panic用于真正异常的情况

recover生效范围,在当前goroutine的被defer的函数中生效

例子

func Now() Time
func NowTime() Time

t := time.Now()
t := time.NowTime()

这里用func Now()更加简洁更适合

 func Parse(s string)(Duration, error)          //这个容易被误解
 func ParseDuration(s string)(Duration ,error)  //这个详细

 duration := time.Parse(s)
 duration := time.ParseDuration(s)