The Zen of Go

翻译自

https://the-zen-of-go.netlify.app/

 

Dave Cheney在YouTube也有这次演讲的视频。

 

每个包实现单一目的
精心设计的Go软件包提供了一个单一的想法,以及一系列相关的行为。一个好的Go软件包首先选择一个好名字。您可以将包裹的名称想像成一个升降梯,用一个词来描述包裹的内容。

明确处理错误,显示的处理
健壮的程序由处理故障案例的片段组成,然后再将其拍在背面。 if err!= nil {return err}的冗长性被故意在发生故障的每个点处理故障的值所抵消。紧急和恢复也不例外,它们并非打算以这种方式使用。

早日返回,而不是深深地嵌套
每次缩进时,您都会在程序员的堆栈中添加另一个先决条件,这会占用他们短期内存中的7±2个插槽之一。避免需要深缩进的控制流。与其深入嵌套,不如使用保护子句将成功路径保持在左侧。

并发给调用者
让调用者选择是否要异步运行您的库或函数,不要强加于他们。如果您的库使用并发,则应透明地进行。

在启动goroutine之前,请知道它何时会停止
Goroutines拥有资源;锁,变量,内存等。释放这些资源的可靠方法是停止拥有的goroutine。

避免包级别状态
通过提供类型需要的依赖项作为该类型上的字段,而不是使用包变量,来寻求明确的,减少耦合和诡异的动作。

简单性很重要
简单性不是老练的代名词。简单并不意味着粗糙,而是可读性和可维护性。如果可以选择,请遵循较简单的解决方案。

编写测试以锁定包API的行为
请确保测试用户可以观察和依赖的行为。

如果您认为速度缓慢,请先通过基准测试进行验证
以表现为名犯下了许多危害可维护性的罪行。优化会破坏抽象,暴露内部和紧密耦合。如果您选择承担这笔费用,请确保有充分理由这样做。

节制是一种美德
适度使用goroutine,通道,锁,接口,嵌入。

可维护性计数
清晰,易读,简单是可维护性的所有方面。离开后,您可以努力维护的东西可以保留吗?您今天该如何做,才能使以后的人们变得更轻松?

posted @ 2020-04-28 10:10  zhangyu63  阅读(248)  评论(0编辑  收藏  举报