Golang之禅
- 原文:https://the-zen-of-go.netlify.com/
- 原文更新时间:2020-02-04 08:26:39 UTC
- 翻译:Tacey Wong
- 翻译时间:2020-3-7
编写简单、可读、可维护的Go代码
每一个包实现一个目的
精心设计的Go软件包只提供单一功能和一系列相关的行为。 一个好的Go软件包首先要选择一个好名字。 把你的包名想象成一个电梯广告词 ———— 用一个词来描述它所提供的东西。
显式处理错误
健壮的程序是由处理失败case的各个片段组成的。冗长的if err != nil { return err }
比在故障发生时有意地处理每个故障条件的价值更重要。Panic
和Recover
不是异常,它们不是设计用来作为异常处理的。
尽早返回,而不是深度嵌套
每次缩进都要向程序员的大脑堆栈中添加一个前置条件,占用他们的短期内存中的7 ±2个槽中的一个。避免需要深度缩进的控制流。与其深入嵌套,不如使用guard clauses将success path保持在左侧。
将并发留给调用者
让调用者自行选择是否以异步的方式使用你的库,不要强加安排。如果你的库存在并发性行为,也应该将此透明让调用者无感知。
在启动goroutine之前,要知道它何时会停止
Goroutines拥有锁、变量、内存等资源。释放这些资源的可靠方法是停止拥有这些资源的goroutine
避免包级别状态
通过将类型需要的依赖项作为该类型上的字段而不是使用包变量来寻求显式的、减少耦合和的怪异操作。
简单很重要
简单并不是 unsophisticated的同义词,简单并不意味着粗糙。而是可读性和可维护性。如果可以选择,请遵循较简单的解决方案。
编写测试以锁定程序包API的行为
你的包API是你与你用户之间的合约,测试是写入这些合约的保证。确保你测试了用户可以观察和依赖的行为。
如果您认为速度缓慢,请先通过基准测试进行验证
经常有人以性能的名义来破化程序的可维护性。优化会破坏抽象,暴露内部和紧密耦合. 如果你要承担这个代价需要有充足的理由
节制与适度是一种美德
使用goroutines、channels、锁、接口、embedding要节制适度。
可维护性指标
可维护性主要包含清晰,易读,简单。你努力构建的东西在你离开后还能得到维护吗?今天你能做些什么来让后来者更轻松?
还真有人点开啊🤣随意随意😂