**来自官方FAQ的解答:**
用Go语言设计者的话说,主要有如下几点
1)计算机的速度变得极快,但软件开发还不够快。
2)在今天,依赖管理成为了软件开发中一个大的部分,但C传统语言的“头文件”与清晰的依赖分析——以及快速编译背道而驰。
3)对于像Java和C++那笨重的类型系统的反抗越来越多,这将人们推向了Python和JavaScript之类的动态类型语言。
4)流行的系统语言对于像垃圾回收与并行计算那种基本思想的支持并不算好。
5)多核计算机的出现产生了一些麻烦与混乱。
而Go语言是一种并发的、带垃圾回收的、快速编译的语言。它需要满足以下几点:
1)它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。
2)Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。
3)Go的类型系统没有层级,因此不需要在类型之间的关系定义上花费时间。此外,尽管Go是静态类型的,该语言也试图使类型感觉起来比典型的面向对象语言更轻量级。
4)Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。
5)按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。
Go在既有语言与环境下进行系统编程的挫折中诞生。编程变得太难,对语言的选择有一定的责任。 我们必须在高效编译、高效执行或轻松编程之间选择其一,在同样主流的语言中,三者不能同时达到。 程序员们通过转移到Python和JavaScript之类的动态类型语言,而非C++或一定程度上的Java上, 来选择轻松在安全和效率之上。
Go试图成为结合解释型编程的轻松、动态类型语言的高效以及静态类型语言的安全的编译型语言。 它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题: 一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。 这些无法通过库或工具解决好,必须创造新的语言。
有疑问加站长微信联系(非本文作者)