• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

高质量编程 2

武飞扬头像
James_Wang
帮助1

目录

2. 编码规范

3. 性能优化建议

2. 编码规范

控制流程:避免嵌套,保持正常流程清晰。如果两个分支中都包含return语句,则可以去除冗余的else. 尽量保持正常代码路径为最小缩进, 优先处理错误情况/特殊情况,尽早返回或继续循环来减少嵌套。最常见的正常流程的路径被嵌套在两个 if 条件内。成功的退出条件是return nil, 必须仔细匹配大括号来发现。 函数最后一行返回一个错误,需要追湖到匹配的左括号,才 能了解何时会触发错误 。如果后续正常流程需要增加一步操作,调用新的函数,则又会增加一层嵌套。

错误和异常处理:简单的错误,指的是仅出现一次的错误,且在其他地方不需要捕获该错误。优先使用 errors.New 来创建蛋名变量来直接表示简单错误。 如果有格式化的需求,使用 fmt.Errorf. 错误的 Wrap 和 Unwrap,错误的 Wrap 实际上是提供了一个 error 嵌套另 error 的能力,从而生成一个 error 的跟踪链。 在fmt.Errorf 中使用:%w 关键字来将一个错误关联至 错误链中。错误判定,判定一个错误是否为特定错误,使用 errors.ls. 不同于使用 ==,使用该方法可以判定错误链上的所有错误是否含有特定的错误。在错误链上获取特定种类的错误,使用errors.As. panic, 不建议在业务代码中使用 panic,调用函数不包含 recover 会造成程序崩溃,若问题可以被屏蔽或解决,建议使用 error 代替 panic. 当程序启动阶段发生不可逆转的错误时 可以在 init 或main 函数中使用 panic. recover, recover 只能在被 defer 的函数中使用。嵌套无法生效。只在当前 goroutine 生效。defer 的语句是后进先出。如果需要更多的上下文信息,可以recover 后在 log 中记录当前的调用栈。

3. 性能优化建议

Benchmark: 性能表现需要实际数据衡量。Go 语言提供了支持基准性能测试的 benchmark 工具。

Slice: slice 预分配内存, 尽可能在使用 make() 初始化切片时提供容量信息。切片本质是一个数组片段的描述,包括数组指针,片段的长度,片段的容量(不改变内存分配情况下的最大长度)。切片操作并不复制切片指向的元素。创建一个新的切片会复用原来切片的底层数组。大内存未释放,在已有切片基础上创建切片,不会创建新的底层数组。 场景: 原切片较大,代码在原切片基础上新建小切片,原底层数组在内存中有引用,得不到释放。可用copy替代re-slice.

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhackc
系列文章
更多 icon
同类精品
更多 icon
继续加载