Go(又称为Golang)是一种开源的编程语言,由Google开发,于2009年首次公开发布。它旨在提供简洁、高效、可靠的软件开发解决方案。Golang是一种静态强类型、编译型语言,Golang具有很强的表达能力,得益于其并发机制,用它编写的程序能够非常有效地利用多核与联网的计算机,其新颖的类型系统则使程序结构变得灵活而模块化。 Go 代码编译成机器码不仅非常迅速,还具有方便的垃圾收集机制和强大的运行时反射机制。
产生背景
Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
自从Go语言由谷歌于2009年11月正式推出,成为开源项目以来,它逐渐成为了软件开发领域中备受关注的编程语言之一。在Go语言的设计中,罗伯特·格瑞史莫(Robert Griesemer)、罗布·派克(Rob Pike)以及肯·汤普逊(Ken Thompson)等资深工程师于2007年开始设计Go,并为其倾注了大量心血。他们的设计理念旨在打造一门简洁、高效、易于学习和使用的语言,以满足现代软件开发的需求。
随着Ian Lance Taylor和Russ Cox等工程师的加入,Go语言的发展进入了一个快速的阶段。Go语言的开发团队持续致力于不断优化语言特性、改进编译器和运行时,以提升其性能和稳定性。
Go语言的并发模型和垃圾回收功能使得它在处理高并发任务和管理内存方面表现出色。这使得Go语言成为了构建云原生应用、网络服务、分布式系统等领域的理想选择。
Go最开始是基于Inferno操作系统所开发的,后续在Linux,Windows和Mac OS X平台上进行了实现。这使得Go语言可以在不同的操作系统上进行开发和部署,提供了更广泛的应用场景。
Go语言在2016年被软件评价公司TIOBE选为“TIOBE 2016年最佳语言”,这进一步证实了其在开发者社区中的影响力和受欢迎程度。
至今,Go语言每半年发布一个二级版本,截止至2024年2月已经发布到1.22版本,这表明了Go语言团队对语言持续发展的承诺和努力。Go语言的未来发展可期,它将继续在软件开发领域发挥重要作用,为开发者提供更好的开发体验和工具支持。
版本更新
1. Go 1.1 - 2013 年 5 月
2. Go 1.2 - 2013 年 12 月
3. Go 1.3 - 2014 年 6 月
4. Go 1.4 - 2014 年 12 月
5. Go 1.5 - 2015 年 8 月
6. Go 1.6 - 2016 年 2 月
7. Go 1.7 - 2016 年 8 月
8. Go 1.8 - 2017 年 2 月
9. Go 1.9 - 2017 年 8 月
10. Go 1.10 - 2018 年 2 月
11. Go 1.11 -2018年8月
12. Go1.12 - 2019年2月
13. Go1.13 - 2019年9月
14. Go1.14 - 2020年2月
15. Go1.15 - 2020年8月
16. Go1.16 - 2021年2月
17. Go1.17 - 2021年8月
18. Go1.18 - 2022年3月
19. Go1.19 - 2022年8月
20. Go1.20 - 2023年2月
21. Go1.21 - 2023年8月
22. Go1.22 - 2024年2月
主要功能
Go的语法接近
C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以
东尼·霍尔的
通信顺序进程(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输。在1.8版本中开放插件(Plugin)的支持,这意味着现在能从Go中动态加载部分函数。
与C++相比,Go并不包括如
枚举、
异常处理、
继承、
泛型、
断言、
虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。Go 2.0版本将支持泛型,对于断言的存在,则持负面态度,同时也为自己不提供类型继承来辩护。
不同于
Java,Go内嵌了
关联数组(也称为
哈希表(Hashes)或字典(Dictionaries) ),就像字符串类型一样。
设计理念
Go语言受到了C语言的影响,尤其是来自Plan 9系统。然而,Go语言强调更加简单和安全的编程模式,并在语法和环境上采用了动态语言中更为常见的模式。以下是一些Go语言在设计时考虑的理念和实现:
1. 类型推断和简洁变量声明: Go语言引入了类型推断,允许开发者在声明变量时省略类型,使得代码更加简洁和易读。例如,可以使用’:=’运算符进行变量声明和初始化,而无需显式指定类型,这在动态语言中比较常见。
2. 快速编译: Go语言的编译速度非常快,这使得开发者可以更快地迭代和测试代码。快速编译也有助于减少开发周期,提高开发效率。
3. 远程包管理和在线包文档: Go语言提供了`go get`命令用于远程包管理,开发者可以轻松地下载、安装和更新依赖包。同时,Go语言官方网站提供了在线包文档,方便开发者查阅和学习。
4. 并发原语: Go语言内置了轻量级进程(goroutine)、通道和select语句等并发原语,使得编写并发程序变得简单和高效。这是Go语言在处理并发任务方面的独特优势之一。
5. 接口系统和类型嵌入: Go语言采用了接口系统代替虚拟继承,以及类型嵌入代替非虚拟继承,这使得代码更加灵活和模块化。
6. 静态链接的本机二进制文件: Go语言的工具链默认情况下生成静态链接的本机二进制文件,这意味着生成的可执行文件可以独立运行,无需依赖外部Go依赖项。
7. 简单的语言规范: Go语言的设计目标之一是保持语言规范足够简单。因此它避免了一些复杂的语言特性,使得语言更加直观和易于学习。
图标发展
Go的吉祥物(Gopher)[5]随2009年Golang开源时一同发布,该吉祥物造型由Renée French设计,gopher 第一次出现是为了促进新泽西州 WFMU 广播电台 的发展,Renée French借鉴了该设计。
对于 Go App Engine 运行时的启动. 在 Google I/O 2011 大会上,Squishable被邀请来来生产毛茸茸的gopher玩偶,这也是gopher第一次被染成蓝色,并以三维的形式出现。
2016 年 11 月,字体设计师Charles Bigelow和Kris Holmes发布了专门供 Go 项目使用的 Go 和 Go Mono 字体。 Go 是一种类似于Lucida Grande 的无衬线字体,而 Go Mono 是等宽字体。
2018年4月,原logo由品牌设计师Adam Smith重新设计。新logo是一个现代、风格化的GO,向右倾斜,尾随斜线[6]。
应用领域
Go的应用领域广泛,其在云原生,Web开发,存储,分布式系统,游戏等领域有着广泛的应用。由于其编译器和执行器的效率极高,生成的原生代码运行速度快,在高并发场景下的表现出色,不少企业在业务场景中使用Go替代Java。
运行环境
Windows
Windows 7 or later, Intel 64-bit processor
macOS
Apple macOS (ARM64)
macOS 10.13 or later, Intel 64-bit processor
Linux
Linux 2.6.32 or later, Intel 64-bit processor
编译器
当前有两个Go
编译器分支,分别为官方编译器gc和gccgo。官方编译器在初期使用C写成,后用Go重写从而实现自举。Gccgo是一个使用标准GCC作为后端的Go编译器。
官方编译器支持跨平台编译(但不支持CGO),允许将源代码编译为可在目标系统、架构上执行的二进制文件。