Skip to content

Commit

Permalink
Updates README.md
Browse files Browse the repository at this point in the history
Auto commit by GitBook Editor
  • Loading branch information
FengNote committed Sep 28, 2016
1 parent 54e593e commit 6e24b8a
Showing 1 changed file with 6 additions and 10 deletions.
16 changes: 6 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,16 @@

“Go 是一个开源的编程语言,它使得人们可以很容易的创建简洁、可靠、且高效的软件” ---摘自golang.org官网

```

2007年九月, Google的三个在计算机界举足轻重的人物,Robert Griesemer\(Java HotSpot虚拟机和Google V8 JavaScript engine的核心开发者之一\)、Ken Thompson\(Unix操作系统的联合开发者,B语言之父,C语言联合创造者\)、以及Rob Pike\(Plan9分布式操作系统作者,同Ken Thompson一起创造了UTF-8编码\) , 开始构想Go语言的蓝图。2009年11月,Go的第一个版本发布。Go语言及其配套的一系列工具集的主要设计目标是要兼具足够的表达力和高效性。这里高效性值得是同时在编译效率和执行效率方面都高效,并且可以帮助程序员高效的写出可靠稳定的程序。

Go猛一看长得比较像C语言。和C语言一样,Go面向的是专业的程序设计人员,玩的溜的老鸟可以利用Go在最小的开销代价下获得极大的性能。不过并不能说Go只是一个升级版的C。Go语言在设计的时候借鉴移植了不少其他语言的有点,同时也吸取其他语言的教训避开了一些容易导致复杂性和不可靠性的坑。Go语言在处理并发性问题方面有着过人的天资,并且在处理数据抽象和面向对象编程问题时灵活得令人发指。此外,Go语言拥有程序员们喜闻乐见的GC机制,可以自动管理内存
```

```


Go语言特别适合拿来做网络服务器,或是一些工具软件。不过作为一门通用编程语言,Go当然也可以拿来做一些其他领域的事情,比如图像处理,移动应用,或是机器学习等等。Go语言正在逐步取代一些弱类型的脚本语言,这得益于Go很好的平衡了表达性和安全性。Go语言通常可以获得比动态语言更高的执行速度,同时不会因为未知类型之类的错误导致程序挂掉。

Go是一个开源醒目,这意味着任何人只要感兴趣都可以自由的研究Go的编译器,标准库以及相关工具库代码。来自全世界的爱好者们活跃在社区里,一起为Go项目提交着各种各样的代码。Go语言可以运行于任何类Unix操作系统,包括Linux,FreeBSD,OpenBSD,Mac OS X,甚至还包括Plan9 系统,当然微软的Windows也在内。在这些操作系统上写的Go程序不需要修改就可以移植到其他操作系统上运行。
```

本书主要目的在于帮助你尽快的开始上手Go语言,让你高效的掌握Go语言的特性,能够充分利用Go语言及其标准库的强大之处,写出清晰、地道、高效的程序。

Expand All @@ -24,15 +23,14 @@ Go语言的身世

Go 有时候会被描述为“和C长得很像的语言”,或者说成是“21世纪的C语言”。 从C语言那里,Go继承了表达式语法,控制流语句,基本数据类型,call-by-value参数传递机制,指针,还有最重要的一个特性:也就是C语言所强调的,把程序编译成有效的机器编码,原生的同目标操作系统配合高效工作。

```

不过Go的家庭族谱上还有其他的祖先。其中一个主要的分支来自于Niklaus Wirth创造的一系列语言。这一支的影响始于Pascal语言,然后从Modula-2语言引入了package包的概念,借鉴Oberon语言去掉了module interface稳健和module implementation
```


稳健的区别,而Oberon-2语言则影响了Go的package语法,import语法,和declaration语法, Object Oberon则提供了函数声明的语法格式参考。

```
另一支Go的祖先则是来自于贝尔实验室的一系列小众编程语言。这一支祖先虽然小众,但是对Go的特性却影响重大,正是由于该分支对Go的影响,才使得Go能够明显的同其他现代编程语言区分开来。这一系列语言的原型都来自于1978年Tony Hoare关于并发编程原理的论文。Tony提出了communicating sequential processes\(CSP\)的概念。在CSP模型中,一个程序实际上是一堆并行进程的组合,进程间没有共享的状态,进程间相互通讯通过频道(channel)来进行。不过Hoare的CSP描述只是一个概念上的语言,重点是说明并发性的一些基础概念。这个时候的CSP并不是一个用来可以编写可执行程序的编程语言实现。
```


Rob Pike和他的小伙伴们则开始动手进行一些实验性工作,把CSP理论落实到实际的编程语言上来。最早的实验产物被命名为Squeak(英文“吱吱声”之意,意为用于和老鼠交流的语言)。这玩儿真是用来和老鼠交流的——该语言主要用于处理鼠标和键盘的事件信息,用的是静态创建的channels。然后这伙人又捣鼓出来了升级版Newsqueak,加入了类似C语言的语句和表达式语法,以及类似Pascal语言的类型标注。Newsqueak已经是一个支持垃圾回收的纯功能性语言了,虽然用途仍然是管理键盘、鼠标,以及一些窗口消息事件。此时的Channels作为最高类型,可以支持动态创建,也可以以变量的形式存储。

Expand Down Expand Up @@ -102,5 +100,3 @@ Playground和线上教程的主要缺点是他们只能导入标准库,很多

既然Go是一个开源项目,你当然可以阅读标准库中任意类型或是函数的实现源码,网址是https:\/\/golang\/org\/pkg。下载的环境里也有。阅读源码可以深刻的理解整个机制是如何运行的,了解更多语言的细节,最起码可以学学专家们是如何写地道的Go程序的。



0 comments on commit 6e24b8a

Please sign in to comment.