GO语言学习day3

57 阅读3分钟

高质量编程

高质量: 编写的代码能够达到正确可靠、简洁清晰的目标。

编程原则:

1.简单性

(1) 消除“多余的复杂性”,以简单清晰的逻辑编写代码

(2) 不理解的代码无法修复改进

2.可读性

(1)代码是给人看的,而不是机器

(2)编写可维护代码的第一步是确保代码可读

3.生产力

编程在当前更多是团队合作,因此团队整体的工作效率是非常重要的一方面 为了降低新成员上手项目代码的成本,Go语言甚至通过工具强制统一所有代码格式 编码在整个项目开发链路中的一个节点,遵循规范,避免常见缺陷的代码能够降低后续联调、测试、验证、上线等各个节点的出现问题的概率,就算出现问题也能快速排查定位

编码规范

  • 代码格式

    可以使用gofmtgoimports工具

  • 注释

    解释代码作用:适合注释公共符号

    解释代码如何实现的:适合注释实现过程

    解释代码实现的原因:适合解释代码的外部因素,提供额外上下文

    什么情况下会出错:适合解释代码的限制条件

  • 命名规范

    • 简洁胜于冗长

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

      • 例如使用ServeHTTP而不是ServeHttp
      • 使用XMLHTTPRequest 或者xmlHTTORequest
    • 变量距离其被使用的地方越远,则越需要携带越多的上下文信息

      • 全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义

image.png

iindex的作用域范围仅限于for循环内部时index的额外冗长几乎没有增加对于程序的理解

image.png

-`deadline`替换成`t`降低了变量的信息量
- t常代指任意时间
- deadline指截止时间,有特定含义

package

- 只由小写字母组成,不包含大写字母和下划线等字符。
- 简短并包含一定的上下文信息。例如shema、task
- 不要与标准库同名。
  • 控制流程

image.png

如果两个分支都包含return语句,则可以去除冗余的else 方便后续维护,else一般是正常流程,如果需要在正常流程新增判断逻辑,避免分支嵌套

image.png

  1. 最常见的正常流程的路径被嵌套在两个if条件内
  2. 成功的退出条件是return nil,必须仔细匹配大括号来发现
  3. 函数最后一行返回一个错误,需要追溯到匹配的左括号,才能了解何时会触发错误
  4. 如果后续正常流程需要增加一步操作,调用新的函数,则又会增加一层嵌套

调整后的代码

image.png

  • 错误和异常处理

简单错误

- 简单的错误指的是仅出现一次的错误,且在其他地方不需要捕获该错误
- 优先使用errors.New来创建匿名变量来直接表示错误
- 如果有格式化的需求,使用fmt.Errorf

image.png

错误的WrapUnwrap

- 错误的Wrap实际上是提供了一个error嵌套另一个error的能力,从而生成一个error的跟踪链
- 在fmt.Errorf中使用%w关键字来将一个错误关联至错误链中

image.png