为什么使用 Go 语言？
他们知道我热衷于 Go 语言，但他们想知道为什么我认为其他人也应该关心。本文包含三个我认为 Go 是重要的编程语言的原因。
编程语言 Go
111.20.112.126
自由开源，真正的独立系统也是喜欢滴一点点！！！
来自陕西西安的 Chrome 57.0|GNU/Linux 用户
2017-04-02T19:50:20.000
175.0.161.66
go的轻量线程（协程）并发在默认情况下的确能提供较为不错的性能，但是很多时候我们可能还是需要aio或者多路复用io来解决一些极端的性能需求。换句话说就是go过于领域特化了。早些时候有口号说go是要取代c++听着像是讲笑话，像我们现在项目里面很多性能关键的点都是手写汇编来调优，严格控制数据结构在内存中的分布情况和cpu缓存线的利用，先不说go程序支不支持通过hack的方式这么做，一个事实是github现有的很多go程序基本是在滥用协程，根本不清醒自己在写什么（当然写c++的不清醒的也有很多）。
来自湖南长沙的 QQ Browser 9.5|Windows 7 用户
2017-04-05T04:44:39.000
他们知道我热衷于 Go 语言，但他们想知道为什么我认为其他人也应该关心。本文包含三个我认为 Go 是重要的编程语言的原因。
几个星期前，我一个朋友问我：“为什么要关心 Go 语言”？ 因为他们知道我热衷于 Go 语言，但他们想知道为什么我认为*其他人*也应该关心。本文包含三个我认为 Go 是重要的编程语言的原因。


![](/data/attachment/album/201704/02/180352wzvhlh955q5zl9ff.jpg)


### 安全


个人而言，你和我或许完全有能力在 C 中编写程序，既不会泄漏内存，也不会不安全地重复使用内存。然而，整体上，即使有超过 [40 年](https://en.wikipedia.org/wiki/C_(programming_language))的经验，用 C 的程序员也无法可靠地这样做。


尽管静态代码分析、valgrind、tsan 以及 “-Werror” 已经存在了几十年，却很少有证据表明这些工具被广泛认可，更不用说广泛采用。总而言之，事实表明，程序员根本无法安全地管理自己的内存。现在是离开 C 的时候了。


Go 不需要程序员直接管理内存，所有内存分配都由语言运行时自行管理，使用前初始化，必要时检查边界。它肯定不是提供这些安全保障的第一个主流语言，Java（1995）可能是该冠军的竞争者。关键是，世界对不安全的编程语言没有胃口，所以人们默认认为，Go 是内存安全的。


### 开发人员生产力


从 20 世纪 70 年代末，开发人员的时间变得比硬件所耗费的时间更昂贵了。开发人员的生产力是一个不断扩展的话题，但它归结为这一点：你花了多少时间做有用的工作，又有多少时间等待编译器或者失望地迷失在外部代码库中。


有个笑话说 Go 是在等待 [C ++ 程序编译](https://commandcenter.blogspot.com.au/2012/06/less-is-exponentially-more.html)时开发的。快速编译是 Go 的一个重要功能，也是吸引新开发人员的关键工具。虽然编译速度仍然是一个[永久的战场](https://dave.cheney.net/2016/11/19/go-1-8-toolchain-improvements)，但公平地说，在其他语言中需要几分钟的编译，在 Go 中只需要几秒钟。


Go 程序员意识到生产力的更根本的问题是代码是**为了读而写的**，所以将[代码的阅读行为放在编写之上](https://twitter.com/rob_pike/status/791326139012620288)。Go 通过工具和自定义来强制所有代码格式化成特定的样式。这消除了学习项目特定语言的方言时的困难，并有助于发现错误，因为它们**看上去**就是不正确。


由于专注于分析和机器辅助，Go 开发人员开始采用越来越多的工具来发现常见的编码错误，这种工具从来没有在 C 语言开发者中产生共鸣 - Go 开发人员**希望**工具帮助他们保持代码清洁。


### 并发性


十多年来，芯片设计师一直在警告[免费午餐将会结束](http://www.gotw.ca/publications/concurrency-ddj.htm)。从最低端的手机到最耗电的服务器，硬件的并行性以[更多、更慢、堆砌 cpu 内核](https://www.technologyreview.com/s/601441/moores-law-is-dead-now-what/)的形式出现，但只有**当**你的语言可以利用它们才有意义。因此，并发特性需要内置到我们编写的要在今天的硬件上运行的软件中。


通过提供一种基于协程的[轻量级并发模型](https://blog.golang.org/concurrency-is-not-parallelism)，或者是 Go 中已知的 goroutines，Go 超越了那些暴露操作系统的多进程或多线程并行模型的语言。goroutines 允许程序员避开复杂的回调，而语言运行时确保有足够的线程来保持你的内核的活跃。


### 总结


我给朋友推荐 Go 有三个原因：安全性、生产力和并发性。有些语言可以涵盖一个也有可能是两个方面，但是这三个方面的结合使得 Go 成为主流程序员的绝佳选择。


### 相关文章：


1. [为什么 Go 和 Rust 不是竞争对手](https://dave.cheney.net/2015/07/02/why-go-and-rust-are-not-competitors)
2. [听听我在 OSCON 上谈 Go 语言性能](https://dave.cheney.net/2015/05/31/hear-me-speak-about-go-performance-at-oscon)
3. [我在 GopherChina 和 GopherCon Singapore 中的演讲](https://dave.cheney.net/2017/02/09/im-speaking-at-gopherchina-and-gophercon-singapore)
4. [压力测试你 Go 包](https://dave.cheney.net/2013/06/19/stress-test-your-go-packages)



---


via: <https://dave.cheney.net/2017/03/20/why-go>


作者：[Dave Cheney](https://dave.cheney.net/) 译者：[geekpi](https://github.com/geekpi) 校对：[jasminepeng](https://github.com/jasminepeng)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

