GOTT-提升代码可读性

Golang On The Toilet–Readable

golang on the toilt 该名称源于「谷歌」的 google on the toilet,谷歌公司会在厕所里贴一些技术上的小知识点或注意点,让大家在上厕所的时候都可以学习一下。

所以本篇博客,也是诺列一些在平时开发中,使用 golang 的一些小知识点。

提升代码的可读性

总结一句话就是,你写的代码,不要仅限于别人能看懂,而且还要轻松的看懂。不要在交接工作或者同事要看你代码学习的时候,同事心里骂娘。要写一些简单并且可读性高的代码。不仅仅是为了别人,也为了自己。

if, else and happy path

1. 避免在 else 里 return
// Bad example
func abs(x int) int {
  if x >= 0 {
    return x
  } else {
    return -x
  }
}

// Good example
func abs(x int) int {
  if x >= 0 {
    return x
  }
  
  return -x
}
  • 在 Bad example 中,else 里也返回了一个值,其实这增加了理解成本,所以这里可以直接去掉 else,在最后返回就好。
2. 尽早返回 error,消除 happy path

happy path 简单的说就是:完全不考虑异常

// Bad example 2
func aFunc() error {
    err := doSomething()
    if err == nil {
        err := doAnotherThing()
        if err == nil {
            return nil // happy path
        }
        return err
    }
    return err
}

// Good example 2
func aFunc() error {
    err := doSomething()
    if err != nil {
        return err
    }
    err := doAnotherThing()
    if err != nil {
        return err
    }
    return nil
}

  • 在上述例子中,Bad example 接受一个 err,没有及时处理如果发生错误的情况,而是选择了没有错误的情况继续 do something,最后才处理错误,这样就会使代码可读性变差。
  • 在 Good example 中,每一步都及时处理错误,显而易见,Good example 的代码可读性就高了很多。
3. 除非必要,否则可以在初始化的时候赋值
// Bad example 3
var a int
if flag {
    a = 1
} else {
    a = -1
}
// Good example 3
var a = -1
if flag {
    a = 1
}
  • 在 Bad example 中,先声明一个变量,在通过 flag 判断两种情况发分别对变量进行赋值,这样首先不管可读性,个人感觉都非常麻烦。
  • 如果有这种场景,可以直接使用 Good example ,直接在声明的时候对变量赋值。
4. 除非必要,否则避免写 init() 函数
package example

func init() {
  // do something aim to product
  // do something very heavy
}

func InitExample() {
  // do something aim to product
  // do something very heavy
}

func InitDebugExample() {
  // do something aim to product
  // do something very heavy
}
  • 首先解释 init() 函数会被怎么调用,在 golang 里,只要是引用了一个包,就会自动取搜索这个包下的 init() 函数,并且执行。

  • 如果这个 init() 函数做了一些非常重的事情,而且你的场景又用不到这些被 init 的东西,那么就会浪费资源,导致程序变慢。

  • 如果 init() 函数做了一些针对生产环境的初始化,那么在你调试或者单测的时候就会出问题。

  • 你可以以 Init 为前缀写一些特有的 Init 函数,例如上述例子中的 2,3 。这样不管是生产还是测试,都可以选择正确的 Init 函数。而且,也可以在你需要的时候在初始化(类似于懒汉模式),这样也可以节省计算机资源。

5. 合理使用注释

要写好的注释,而不是废话。

// Bad example 1
func Abs(num int) int {
    // if num is negative
    if num < 0 {
        reutrn -num
    }
    // if num is non-negative
    return num
}

// Good example 1
// Return abosulote value of an int value
func Abs(num int) int {
    if num < 0 {
        reutrn -num
    }
    return num
}
  • 上述例子,Bad example 中写得注释都是废话,没什么用,而且看代码就知道了。
  • Good example 在函数前解释函数做了什么,让读者在阅读代码前就对该函数有了一个大体的认识。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值