<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>编程语言 on 涯余的博客</title><link>https://hangyan.github.io/tags/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/</link><description>Recent content in 编程语言 on 涯余的博客</description><generator>Hugo</generator><language>zh</language><managingEditor>hang.yan@hotmail.com (涯余)</managingEditor><webMaster>hang.yan@hotmail.com (涯余)</webMaster><lastBuildDate>Fri, 19 Jul 2019 00:11:33 +0000</lastBuildDate><atom:link href="https://hangyan.github.io/tags/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/index.xml" rel="self" type="application/rss+xml"/><item><title>Golang FAQ</title><link>https://hangyan.github.io/post/2019-07-19-golang-faq/</link><pubDate>Fri, 19 Jul 2019 00:11:33 +0000</pubDate><author>hang.yan@hotmail.com (涯余)</author><guid>https://hangyan.github.io/post/2019-07-19-golang-faq/</guid><description>&lt;!-- toc --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hangyan.github.io/post/2019-07-19-golang-faq/#%e6%96%87%e6%a1%a3%e7%9a%84%e5%8f%af%e5%be%97%e6%80%a7"&gt;文档的可得性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hangyan.github.io/post/2019-07-19-golang-faq/#%e8%af%ad%e8%a8%80%e8%ae%be%e8%ae%a1%e7%bb%86%e8%8a%82"&gt;语言设计细节&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hangyan.github.io/post/2019-07-19-golang-faq/#%e5%8f%af%e8%af%bb%e6%80%a7"&gt;可读性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hangyan.github.io/post/2019-07-19-golang-faq/#generic-types"&gt;Generic types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hangyan.github.io/post/2019-07-19-golang-faq/#error-%e4%b8%8e-exception"&gt;Error 与 Exception&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hangyan.github.io/post/2019-07-19-golang-faq/#assertions"&gt;assertions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hangyan.github.io/post/2019-07-19-golang-faq/#static-link"&gt;static link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hangyan.github.io/post/2019-07-19-golang-faq/#tips"&gt;Tips&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hangyan.github.io/post/2019-07-19-golang-faq/#unused-imports"&gt;unused imports&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- tocstop --&gt;
&lt;p&gt;Golang FAQ 是一篇比较好的关于 Golang 设计的文档。比较琐碎，但是解释了很多 Golang 设计的权衡之处。没有语言是完美的，从工业界来看，Golang 是一种流行的，成功的编程语言。从语言设计来看，当然仍有欠缺与不足之处。许式伟是前者的角度，王垠是后者的角度。当然除了宏观层面，FAQ 文档仍然提供了很多有趣的细节。&lt;/p&gt;
&lt;h2 id="文档的可得性"&gt;文档的可得性&lt;/h2&gt;
&lt;p&gt;所有的语言都知道支持文档。但可得性是一个更重要的维度。 Python 有 PEP 系列详细解释了语言设计的细节， 有 read the docs 系统为各种 library 提供用户文档。 Golang有 godoc 工具以及 Golang blog, 还有像 FAQ 这样的设计 detail 解释。二者在此方面都是做的比较优秀的，也在一定程度上促进了语言的流行。&lt;/p&gt;
&lt;h2 id="语言设计细节"&gt;语言设计细节&lt;/h2&gt;
&lt;h3 id="可读性"&gt;可读性&lt;/h3&gt;
&lt;p&gt;可读性一方面是要考虑尽量贴近大部分程序员的背景以及知识结构，另一个方面语言的设定要尽量 common, 不会让人需要额外思考来确定一个语法的语义。Golang 对于大部分具有 c / python 等背景的程序员来说非常易懂，也尽量控制新的语法的数量，所以能够迅速的大范围的流行起来。&lt;/p&gt;
&lt;p&gt;另一方面，为了语言的可维护性，去掉一些便捷的语法糖也是一个重要的考量。Golang 去掉了 &lt;code&gt;?:&lt;/code&gt; , 隐式类型转换，指针操作，Goroutine 的内部结构不对外暴露等等。虽然代码不会像 python 那样简短，但在可维护性以及稳定性上都有了改善。&lt;/p&gt;</description></item></channel></rss>