这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
一、重点内容
- 高质量编程
二、高质量编程
- 编码规范:注释
- 注释能够解释代码作用——注释公共符号
- 公共符号:变量、常量、函数以及结构
- 既不明显也不简短的公共功能必须注释
- 库中任何函数都必须注释
- 不需要注释实现接口的方法
- 做了什么——注释实现过程
- 实现的原因——解释代码的外部因素,提供额外的上下文
- 什么情况会出错——解释代码的限制条件
- 注释能够解释代码作用——注释公共符号
- 编码规范:命名
- 变量——简洁、缩略词全大写、需要更多上下文信息
- 函数名——包名和函数名成对出现
- 包——不要与标准库同名
- 编码规范:控制流程
- 避免嵌套
- 优先处理错误情况和错误情况
- 编码规范:错误和异常处理
- 简单错误:优先使用
errors.New - 错误的
Wrap:在错误链上获取特定种类的错误,使用errors.As panic:业务代码中不建议使用;当程序启动阶段发生不可逆转的错误时,可以在main函数中使用panicrecover:recover只能在被defer的函数中使用,嵌套无法生效,只能在当前goroutine生效
- 简单错误:优先使用
三、实践部分
昨日的项目结构实践
- 设计要点:设置全局变量
topicNextId用于计数 - 设计目的:保证
topic的id不重复且唯一 - 实现过程:在读取相关文件的过程中,默认情况下
id自增,此时不断更新topicNextId的值,直至文件读取完毕,再次更新topicNextId,使得之后获取topic信息并append至文件末尾时,能够使用最新且唯一的id值
func initTopicIndexMap(filepath string) error {
topicNextId = 1
open, err := os.Open(filepath)
if err != nil {
return err
}
scanner := bufio.NewScanner(open)
topicTmpMap := make(map[int64]*Topic)
for scanner.Scan() {
text := scanner.Text()
var topic Topic
if err := json.Unmarshal([]byte(text), &topic); err != nil {
return err
}
topicTmpMap[topic.Id] = &topic
topicNextId = topic.Id
}
topicNextId++
topicIndexMap = topicTmpMap
return nil
}
四、个人总结
时间紧,任务重,在项目实践中花费了不少时间,后续会继续补习,尽量跟上进度。