Go是一门编译型的和静态的编程语言。 Go诞生于谷歌研究院。 Go的核心设计成员中包括很多有着数十年编程语言研究领域经验的研究者。
Go程序员常常被称为地鼠(gopher)。
上面已经提到,Go属于编译型的静态语言。但是Go的很多特性使得用Go编程像使用动态脚本语言一样的灵活。 一般很难将静态语言的严格性和动态语言灵活性的优点合二为一。但是Go做到了这一点。 当然,合二为一也会不可避免地带来一些弊端。 但是,对于Go来说,合二为一带来的好处远多于合二为一的带来的弊端。
可读性是在Go语言的设计中一个非常重要的考虑因素。 一个Go程序员常常可以轻松读懂其他Go程序员写的代码。 甚至对于一个没有Go编程经验但具有其它语言编程经验的程序员来说,读懂一份Go源码也不是一件难事。
目前,使用最广泛的Go编译器由Go官方设计和开发团队维护。
以后我们将称此编译器为标准编译器。标准编译器也常常称为gc
(是Go compiler的缩写,不是垃圾回收garbage collection的缩写)。
Go官方设计和开发团队也维护着另外一个编译器,gccgo
。
gccgo
是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成为一个出众的编程语言。 对于很多项目来说,Go是一个相当不错的选择。 目前,Go主要用于网络开发、系统工具开发、数据库开发和区块链开发。 随着从Go 1.18开始支持自定义泛型,预期Go会在更多开发领域流行起来,比如图形界面、游戏、大数据和人工智能等。
最后,我们应该知道,没有一门语言是完美的。Go也一样。Go的设计中有很多折衷和各种权衡。Go 1确实有一些不足。 比如,目前Go不支持任意类型的不变量。这导致很多标准库中一些希望永不被更改的值目前被声明为变量。这是Go程序中的一个潜在安全隐患。
Go101.org网站内容包括Go编程各种相关知识(比如Go基础、Go优化、Go细节、Go实战、Go测验、Go工具等)。后续将不断有新的内容加入。敬请收藏关注期待。
本丛书微信公众号(联系方式一)名称为"Go 101"。二维码在网站首页。此公众号将时不时地发表一些Go语言相关的原创短文。各位如果感兴趣,可以搜索关注一下。
《Go语言101》系列丛书项目目前托管在Github上(联系方式二)。欢迎各位在此项目中通过提交bug和PR的方式来改进完善《Go语言101》丛书中的各篇文章。我们可以在项目目录下运行go run .
来浏览和确认各种改动。
本书的twitter帐号为@Golang_101(联系方式三)。玩推的Go友可以适当关注。
你或许对本书作者老貘开发的一些App感兴趣。
sync
标准库包sync/atomic
标准库包