新!Golds:一款支持展示类型实现关系的本地Go文档服务器、文档生成工具和代码阅读器。

Go语言简介

Go是一门编译型的和静态的编程语言。 Go诞生于谷歌研究院。 Go的核心设计成员中包括很多有着数十年编程语言研究领域经验的研究者。

Go有很多特性,有一些是独特的,有一些借鉴于一些其它编程语言: 除了以上特性,Go还有如下亮点:

Go程序员常常被称为地鼠(gopher)。

上面已经提到,Go属于编译型的静态语言。但是Go的很多特性使得用Go编程像使用动态脚本语言一样的灵活。 一般很难将静态语言的严格性和动态语言灵活性的优点合二为一。但是Go做到了这一点。 当然,合二为一也会不可避免地带来一些弊端。 但是,对于Go来说,合二为一带来的好处远多于合二为一的带来的弊端。

可读性是在Go语言的设计中一个非常重要的考虑因素。 一个Go程序员常常可以轻松读懂其他Go程序员写的代码。 甚至对于一个没有Go编程经验但具有其它语言编程经验的程序员来说,读懂一份Go源码也不是一件难事。

目前,使用最广泛的Go编译器由Go官方设计和开发团队维护。 以后我们将称此编译器为标准编译器。标准编译器也常常称为gc(是Go compiler的缩写,不是垃圾回收garbage collection的缩写)。 Go官方设计和开发团队也维护着另外一个编译器,gccgogccgo是gcc编译器项目的一个子项目。 gccgo的使用广泛度大不如gc, 它的主要作用是做为一个参考,来保证gc的实现正确性。 目前两个编译器的开发都很活跃,尽管Go开发团队在gc的开发上花费的精力更多。

gc编译器是Go官方工具链中一个组件。 Go官方工具链的使用将在下一篇文章中介绍。 Go官方工具链1.0发布于2012年三月。 Go语言规范的最新版本和Go官方工具链的最新版本总是保持一致。 每年Go官方工具链发行两个主版本。

自从Go语言正式发布后,Go的语法变化很小。 但是标准编译器gc却在不断地改进。 使用早期的gc编译的程序在运行的时候在每次垃圾回收的结尾常常会有明显的停顿。 但是自从Go 1.8,使用gc编译的程序在运行时刻已经基本消除了停顿现象。

gc支持跨平台编译。 比如,我们可以在Linux平台上编译出Windows程序,反之亦然。

使用Go编写的程序常常编译得非常快。 编译时间的长短是开发愉悦度的一个重要因素。 编译时间短是很多程序员喜欢Go的一个原因。

Go程序生成的二进制可执行文件常常拥有以下优点: 很多C家族语言,比如C/C++/Rust等,也拥有上述的优点。 但它们缺少Go语言的几个重要优点:

上面所有提到的优点使得Go成为一个出众的编程语言。 对于很多项目来说,Go是一个相当不错的选择。 目前,Go主要用于网络开发、系统工具开发、数据库开发和区块链开发。 也有越来越多的游戏、大数据和人工智能项目开始使用Go开发。

最后,我们应该知道,没有一门语言是完美的。Go也一样。Go的设计中有很多折衷和各种权衡。Go 1确实有一些不足。 比如,目前Go不支持任意类型的不变量。这导致很多标准库中一些希望永不被更改的值目前被声明为变量。这是Go程序中的一个潜在安全隐患。 另外,目前Go不支持自定义泛型。Go语言设计团队并不排斥自定义泛型,他们只是还没有找到一个既优美又能够保持Go语法简洁性的自定义泛型设计方案。


本Go101.org网站将推出一些其它Go学习和使用栏目(比如Go实战,Go测验,Go工具等),敬请收藏关注期待。

本书微信公众号名称为"Go 101"。此公众号将时不时地发表一些Go语言相关的原创短文。各位如果感兴趣,可以搜索关注一下。

本书的twitter帐号为@Golang_101。玩推的Go友可以适当关注。

《Go语言101》项目目前托管在Github上。欢迎各位在此项目中通过提交bug和PR的方式来改进完善Go语言101中的各篇文章。

你或许对本书作者老貘开发的一些App感兴趣。

赞赏
(本书由老貘历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本书和Go101.org网站不断增容和维护的动力。)