Golang FAQ

文档的可得性 语言设计细节 可读性 Generic types Error 与 Exception assertions static link Tips unused imports Golang FAQ 是一篇比较好的关于 Golang 设计的文档。比较琐碎,但是解释了很多 Golang 设计的权衡之处。没有语言是完美的,从工业界来看,Golang 是一种流行的,成功的编程语言。从语言设计来看,当然仍有欠缺与不足之处。许式伟是前者的角度,王垠是后者的角度。当然除了宏观层面,FAQ 文档仍然提供了很多有趣的细节。 文档的可得性 所有的语言都知道支持文档。但可得性是一个更重要的维度。 Python 有 PEP 系列详细解释了语言设计的细节, 有 read the docs 系统为各种 library 提供用户文档。 Golang有 godoc 工具以及 Golang blog, 还有像 FAQ 这样的设计 detail 解释。二者在此方面都是做的比较优秀的,也在一定程度上促进了语言的流行。 语言设计细节 可读性 可读性一方面是要考虑尽量贴近大部分程序员的背景以及知识结构,另一个方面语言的设定要尽量 common, 不会让人需要额外思考来确定一个语法的语义。Golang 对于大部分具有 c / python 等背景的程序员来说非常易懂,也尽量控制新的语法的数量,所以能够迅速的大范围的流行起来。 另一方面,为了语言的可维护性,去掉一些便捷的语法糖也是一个重要的考量。Golang 去掉了 ?: , 隐式类型转换,指针操作,Goroutine 的内部结构不对外暴露等等。虽然代码不会像 python 那样简短,但在可维护性以及稳定性上都有了改善。 ...

2019-07-19 · 1 分钟 · 172 字 · 涯余

Golang 1.9 Release Note

今天在翻存在 Pocket 里的文章,翻到一篇 Golang 1.9 的 Release Note。不得不说,Golang 在文档化上做的相当不错。对比其他语言来说,人们关注于每个版本的更新也会更多。不过这样的对比样本比较少,可能也不是很公正。Python 因为 2/3 版本的分离,可能很多人都不太关心 3 版本的更新。C/CPP 的文档一直比较欠缺,差距太大,而且版本之间迭代的也比较慢(历史包袱也多)。 现在 Golang 的版本已经到 1.13 了大概,2 的 design 也应该有不少文档。这样追下去应该有不少发现。利用语言的新特性来优化代码也是一件很有乐趣的事情。 1.9 新特性介绍 sync.Map 之前知道有这么个东西,但是自己在写代码的时候仍然没有将他作为一个默认的选项来考虑,仍然是自己加了 lock 手工实现,不得不说是一件很拙劣的事情。 type a struct { lock sync.RWMutex data map[string]interface{} } 再加上一些自己实现的get/set函数。现在用一个普通的sync.Map即可。注释上说了它有自己的适用场景: value 只写一次但是多次读 不同 goroutines 读写的数据不重合 即使这样,适用的场景还是挺多的。更少的代码,更好的性能,值得考虑。 Test Golang 的 Test 包也包含了很多比较少见的的功能。借助 1.9 的 Release Note 看了下,也都是很实用的。 test.Helper() 在测试中我们经常需要写一些 helper function,这些函数是服务于真正的测试函数。如果它们出错并且打印出来,只能显示到 helper function 的文件名和行号。比如我们自己实现一个 assert 函数,查看错误就很不方便。而test.Helper()就是为了解决这个问题,当在 helper function 中打印具体的错误时,会显示的是调用者的文件名和行号,如下面例子所示: ...

2019-05-27 · 1 分钟 · 206 字 · 涯余