mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-11 22:06:51 +08:00
01.2.md
This commit is contained in:
@@ -2,11 +2,11 @@
|
|||||||
##1.2.1 影响Go语言发展的早期编程语言
|
##1.2.1 影响Go语言发展的早期编程语言
|
||||||
正如“21世界的C语言”这句话所说,Go语言并不是凭空而造的,而是和C++,Java和C#一样属于C系。不仅如此,设计者们还汲取了其它编程语言的精粹部分融入到Go语言当中。
|
正如“21世界的C语言”这句话所说,Go语言并不是凭空而造的,而是和C++,Java和C#一样属于C系。不仅如此,设计者们还汲取了其它编程语言的精粹部分融入到Go语言当中。
|
||||||
|
|
||||||
在声明和包的设计方面,Go语言受到Pascal,Modula和Oberon系语言的影响;在并发原理的设计上,Go语言从同样受到 Tony Hoare 的CSP(通信序列进程 *Communicating Squential Processes*)理论影响的Limbo和Newsqueak实践中借鉴了一些经验,并使用了和Erlang相同的机制。
|
在声明和包的设计方面,Go语言受到Pascal,Modula和Oberon系语言的影响;在并发原理的设计上,Go语言从同样受到 Tony Hoare 的CSP(通信序列进程 *Communicating Squential Processes*)理论影响的Limbo和Newsqueak的实践中借鉴了一些经验,并使用了和Erlang相同的机制。
|
||||||
|
|
||||||
这是一门完全开源的编程语言,因为它使用BSD授权许可,所以任何人都可以进行商业软件的开发而不需要支付任何费用。
|
这是一门完全开源的编程语言,因为它使用BSD授权许可,所以任何人都可以进行商业软件的开发而不需要支付任何费用。
|
||||||
|
|
||||||
尽管为了能够让目前主流的开发者们能够对Go语言中的类C语言的语法感到非常亲切而易于转型,但是它在极大程度上简化了这些语法,使得它们比C/C++语法更加简洁和干净。同时,Go语言也拥有一些动态语言的特性,这使得使用Python和Ruby的开发者们在使用Go语言的时候感觉非常容易上手。
|
尽管为了能够让目前主流的开发者们能够对Go语言中的类C语言的语法感到非常亲切而易于转型,但是它在极大程度上简化了这些语法,使得它们比C/C++的语法更加简洁和干净。同时,Go语言也拥有一些动态语言的特性,这使得使用Python和Ruby的开发者们在使用Go语言的时候感觉非常容易上手。
|
||||||
|
|
||||||
下图展示了一些其它编程语言对Go语言的影响:
|
下图展示了一些其它编程语言对Go语言的影响:
|
||||||
|
|
||||||
@@ -17,18 +17,18 @@
|
|||||||
##1.2.2 为什么要创造一门编程语言
|
##1.2.2 为什么要创造一门编程语言
|
||||||
- C/C++的发展速度无法跟上计算机发展的脚步,十多年来也没有出现一门与时代相符的主流系统编程语言,因此人们需要一门新的系统编程语言来弥补这个空缺,尤其是在计算机信息时代。
|
- C/C++的发展速度无法跟上计算机发展的脚步,十多年来也没有出现一门与时代相符的主流系统编程语言,因此人们需要一门新的系统编程语言来弥补这个空缺,尤其是在计算机信息时代。
|
||||||
- 对比计算机性能的提升,软件开发领域不被认为发展地足够快或者比硬件发展更加成功(有许多项目均以失败告终),同时应用程序的体积始终在不断地扩大,这就迫切地需要一门具备更高层次概念的低级语言来突破现状。
|
- 对比计算机性能的提升,软件开发领域不被认为发展地足够快或者比硬件发展更加成功(有许多项目均以失败告终),同时应用程序的体积始终在不断地扩大,这就迫切地需要一门具备更高层次概念的低级语言来突破现状。
|
||||||
- 在Go语言出现之前,开发者们总是面临非常艰难的抉择,究竟是使用执行速度快但是编译速度并不理想的语言(如:C++),还是使用编译速度较快但执行效率不佳的语言(如:.NET,Java),或者说开发难度较低但执行速度一般的动态语言呢?显然,Go语言在这3个优势之间做到了最佳的平衡:快速编译,高效执行,易于开发。
|
- 在Go语言出现之前,开发者们总是面临非常艰难的抉择,究竟是使用执行速度快但是编译速度并不理想的语言(如:C++),还是使用编译速度较快但执行效率不佳的语言(如:.NET,Java),或者说开发难度较低但执行速度一般的动态语言呢?显然,Go语言在这3个条件之间做到了最佳的平衡:快速编译,高效执行,易于开发。
|
||||||
|
|
||||||
##1.2.3 Go语言的发展目标
|
##1.2.3 Go语言的发展目标
|
||||||
Go语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行。
|
Go语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行。
|
||||||
|
|
||||||
因此,Go语言是一门类型安全和内存安全的编程语言。虽然Go语言中仍有指针的存在,但并不允许进行指针运算。
|
因此,Go语言是一门类型安全和内存安全的编程语言。虽然Go语言中仍有指针的存在,但并不允许进行指针运算。
|
||||||
|
|
||||||
Go语言的另一个目标是对于网络通信,并发和并行编程的极佳支持,从而更好地利用大量的分布式的和多核的计算机,这一点对于谷歌内部的使用来说就非常重要了。设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。
|
Go语言的另一个目标是对于网络通信,并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机,这一点对于谷歌内部的使用来说就非常重要了。设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。
|
||||||
|
|
||||||
这个特性显然是Go语言最强有力的部分,不仅支持了日益重要的多核与多处理器计算机,也弥补了现存编程语言在这方面所存在的不足。
|
这个特性显然是Go语言最强有力的部分,不仅支持了日益重要的多核与多处理器计算机,也弥补了现存编程语言在这方面所存在的不足。
|
||||||
|
|
||||||
Go语言中另一个非常重要的特性就是它的构建速度(编译和链接到机器代码的速度),一般情况下构建一个程序的时间只需要数百毫秒到几秒。作为大量使用C++来构建基础设施的谷歌来说,这无疑从根本上摆脱了C++在构建速度上非常不理想的噩梦。这不仅极大地提升了开发者的工作效率,同时也使得软件开发过程中的代码测试环节更加紧凑,而不必浪费大量的时间在等待程序的构建上。
|
Go语言中另一个非常重要的特性就是它的构建速度(编译和链接到机器代码的速度),一般情况下构建一个程序的时间只需要数百毫秒到几秒。作为大量使用C++来构建基础设施的谷歌来说,无疑从根本上摆脱了C++在构建速度上非常不理想的噩梦。这不仅极大地提升了开发者的生产力,同时也使得软件开发过程中的代码测试环节更加紧凑,而不必浪费大量的时间在等待程序的构建上。
|
||||||
|
|
||||||
依赖管理是现今软件开发的一个重要组成部分,但是C语言中“头文件”的概念却导致越来越多因为依赖关系而使得构建一个大型的项目需要长达几个小时的时间。人们越来越需要一门具有严格的、简洁的依赖关系分析系统从而能够快速编译的编程语言。这正是Go语言采用包模型的根本原因,这个模型通过严格的依赖关系检查机制来加快程序构建的速度,提供了非常好的可量测性。
|
依赖管理是现今软件开发的一个重要组成部分,但是C语言中“头文件”的概念却导致越来越多因为依赖关系而使得构建一个大型的项目需要长达几个小时的时间。人们越来越需要一门具有严格的、简洁的依赖关系分析系统从而能够快速编译的编程语言。这正是Go语言采用包模型的根本原因,这个模型通过严格的依赖关系检查机制来加快程序构建的速度,提供了非常好的可量测性。
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ Go语言从本质上(程序和结构方面)来实现并发编程。
|
|||||||
|
|
||||||
因为Go语言没有类和继承的概念,所以它和Java或C++看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说这是一门混合型的语言。
|
因为Go语言没有类和继承的概念,所以它和Java或C++看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说这是一门混合型的语言。
|
||||||
|
|
||||||
在传统的面向对象语言中,使用面向对象编程技术显得非常的臃肿,它们总是通过复杂的模式来构建庞大的类型层级,这违背了编程语言应该提升开发速度的宗旨。
|
在传统的面向对象语言中,使用面向对象编程技术显得非常的臃肿,它们总是通过复杂的模式来构建庞大的类型层级,这违背了编程语言应该提升生产力的宗旨。
|
||||||
|
|
||||||
函数是Go语言中的基本构件,它们的使用方法非常灵活。在第六章,我们会看到Go语言在函数式编程方面的基本概念。
|
函数是Go语言中的基本构件,它们的使用方法非常灵活。在第六章,我们会看到Go语言在函数式编程方面的基本概念。
|
||||||
|
|
||||||
@@ -78,28 +78,14 @@ Go语言其实也有一些动态语言的特性(通过关键字 `var`),所
|
|||||||
|
|
||||||
Go语言支持交叉编译,比如说你可以在运行Linux系统的计算机上开发运行下Windows下运行的应用程序。这是第一门完全支持UTF-8的编程语言( ***译者注:.NET好像也支持吧?*** ),这不仅体现在它可以处理使用UTF-8编码的字符串,就连它的源码文件格式都是使用的UTF-8编码。Go语言做到了真正的国际化!
|
Go语言支持交叉编译,比如说你可以在运行Linux系统的计算机上开发运行下Windows下运行的应用程序。这是第一门完全支持UTF-8的编程语言( ***译者注:.NET好像也支持吧?*** ),这不仅体现在它可以处理使用UTF-8编码的字符串,就连它的源码文件格式都是使用的UTF-8编码。Go语言做到了真正的国际化!
|
||||||
|
|
||||||
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
|
||||||
要不等到 ***2013年4月11日*** 再来看看吧~~
|
|
||||||
|
|
||||||
这里还有一些其它的学习资源噢~
|
|
||||||
|
|
||||||
- [《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming):已更新至 [第六课](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture6/lecture6.md)
|
|
||||||
- [《Go Web编程》](https://github.com/astaxie/build-web-application-with-golang)
|
|
||||||
|
|
||||||
神马?你说你不想学习?那好吧,去逛逛论坛看看行情也行~
|
|
||||||
|
|
||||||
- [Golang中文社区](http://bbs.mygolang.com/forum.php)
|
|
||||||
- [Go语言学习园地](http://studygolang.com/)
|
|
||||||
- [Golang中国](http://golang.tc)
|
|
||||||
|
|
||||||
##1.2.6 语言的用途
|
##1.2.6 语言的用途
|
||||||
Go语言被设计成一门应用于搭载Web服务器,存储集群和类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
|
Go语言被设计成一门应用于搭载Web服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
|
||||||
|
|
||||||
Go语言一个非常好的目标就是实现所谓的复杂事件处理([CEP](http://en.wikipedia.org/wiki/Complex_event_processing)),这项技术要求海量并行支持,高度的抽象化和高性能。当我们进入到物联网时代,CEP必然会成为人们关注的焦点。
|
Go语言一个非常好的目标就是实现所谓的复杂事件处理([CEP](http://en.wikipedia.org/wiki/Complex_event_processing)),这项技术要求海量并行支持,高度的抽象化和高性能。当我们进入到物联网时代,CEP必然会成为人们关注的焦点。
|
||||||
|
|
||||||
但是Go语言同时也是一门可以用于实现一般目标的语言,例如对于文本的处理,前端展现,甚至像使用脚本一样使用它。
|
但是Go语言同时也是一门可以用于实现一般目标的语言,例如对于文本的处理,前端展现,甚至像使用脚本一样使用它。
|
||||||
|
|
||||||
值得注意的是,因为垃圾回收和自动内存分配的原因,Go语言不适合来开发对实时要求很高的软件。
|
值得注意的是,因为垃圾回收和自动内存分配的原因,Go语言不适合用来开发对实时性要求很高的软件。
|
||||||
|
|
||||||
越来越多的谷歌内部的大型分布式应用程序都开始使用Go语言来开发,例如谷歌地球的一部分代码就是由Go语言完成的。
|
越来越多的谷歌内部的大型分布式应用程序都开始使用Go语言来开发,例如谷歌地球的一部分代码就是由Go语言完成的。
|
||||||
|
|
||||||
@@ -112,7 +98,7 @@ Go语言可以在Inter或ARM处理器上运行,因此它也可以在安卓系
|
|||||||
在 Google App Engine 中使用Go语言:2011年5月5日,官方发布了用于开发运行在 Google App Engine 上的Web应用的 Go SDK,在此之前,开发者们只能选择使用Python或者Java。这主要是 David Symonds 和 Nigel Tao 努力的成果。目前最新的稳定版是基于r60.3的SDK 1.6.1,于2011年12月13日发布。当前Go语言的稳定版本是Go 1( ***译者注:目前最新的稳定版是Go1.1*** )。
|
在 Google App Engine 中使用Go语言:2011年5月5日,官方发布了用于开发运行在 Google App Engine 上的Web应用的 Go SDK,在此之前,开发者们只能选择使用Python或者Java。这主要是 David Symonds 和 Nigel Tao 努力的成果。目前最新的稳定版是基于r60.3的SDK 1.6.1,于2011年12月13日发布。当前Go语言的稳定版本是Go 1( ***译者注:目前最新的稳定版是Go1.1*** )。
|
||||||
|
|
||||||
##1.2.7 关于特性丢失
|
##1.2.7 关于特性丢失
|
||||||
许多能够在大多数面向对象语言中能够发现的特性Go语言都没有支持,但其中的一部分可能会在未来被支持。
|
许多能够在大多数面向对象语言中使用的特性Go语言都没有支持,但其中的一部分可能会在未来被支持。
|
||||||
|
|
||||||
- 为了简化设计,不支持函数重载和操作符重载
|
- 为了简化设计,不支持函数重载和操作符重载
|
||||||
- 为了避免在C/C++开发中的一些Bug和混乱,不支持隐式转换
|
- 为了避免在C/C++开发中的一些Bug和混乱,不支持隐式转换
|
||||||
|
15
eBook/02.1.md
Normal file
15
eBook/02.1.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
||||||
|
要不等到 ***2013年4月11日*** 再来看看吧~~
|
||||||
|
|
||||||
|
这里还有一些其它的学习资源噢~
|
||||||
|
|
||||||
|
- [《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming):已更新至 [第六课](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture6/lecture6.md)
|
||||||
|
- [《Go Web编程》](https://github.com/astaxie/build-web-application-with-golang)
|
||||||
|
|
||||||
|
神马?你说你不想学习?那好吧,去逛逛论坛看看行情也行~
|
||||||
|
|
||||||
|
- [Golang中文社区](http://bbs.mygolang.com/forum.php)
|
||||||
|
- [Go语言学习园地](http://studygolang.com/)
|
||||||
|
- [Golang中国](http://golang.tc)
|
||||||
|
|
||||||
|
#2.1 平台与架构
|
Reference in New Issue
Block a user