Go语言诞生于2007年9月20日,由三位大佬共同创造,他们分别是
Ken Thompsonopen in new window,图灵奖获得者,Unix系统创始人,B语言创始人,C语言创始人Rob Pikeopen in new window,Plan9操作系统作者之一,UTF-8发明者之一,Go语言设计领头人Robert Griesemeropen in new window,JS V8引擎研发者,三人之中最年轻还有一位是Rob Pike的妻子Renee French,她设计了Go语言的Logo,就是一只蓝色的土拨鼠。
某一天,他们在等待C++项目漫长的编译过程中,Rob Pike脑袋里迸发出了一个新奇的想法,他希望能够设计出一个简洁小巧,编译快速的编程语言,让他们不用每一次编译都要等待如此长的时间,于是在短暂的头脑风暴后,三人于2009年9月20日开了一个短会来讨论和设计这个语言的初步原型,在这个时间点Go便正式诞生了。随后这个团队又加入了各路人马,谷歌公司于2009年11月10日以BSD-3-Clause协议将Go语言正式开源,推出了最初的版本。
这是官网最初的样子提示
值得一提的是,Go只有一个名字:go,golang的叫法仅仅是因为那会域名go被抢注了,在以前是golang.org,现在的官网域名是go.dev。
go团队经过了三年的设计与研发,于2012年3月发布了第一个正式版本Go1(这个时候Go的工具链和运行时都还是C编写的,直到go1.5才完成自举),此后每一年发布两个小版本更新,一直运营和维护到现在。
提示
图中便是三位大佬设计Go语言的情景,里面不少典故
三位创始人其实在很早以前就退隐了,在大部分时间里,团队领头人是Russ Coxopen in new window,他早在Go语言未对外发布时就已经参与到了开发工作当中,此后一直管理Go团队长达12年,直到2024年8月卸任,由Austin Clementsopen in new window接手并领导后续的开发工作。
# 特性语法简单 Go语言在自由度和灵活度上做了取舍,以此换来了更好的维护性和平滑的学习曲线。部署友好 Go静态编译后的二进制文件不依赖额外的运行环境,编译速度也非常快。交叉编译 Go仅需要在编译时简单设置两个参数,就可以编译出能在其它平台上运行的程序天然并发 Go语言对于并发的支持是纯天然的,仅需一个关键字,就可以开启一个异步协程。垃圾回收 Go有着优秀的GC性能,大部分情况下GC延时都不会超过1毫秒。丰富的标准库 从字符串处理到源码AST解析,功能强大且丰富的标准库是Go语言坚实的基础。完善的工具链 Go有着完善的开发工具链,涵盖了编译,测试,依赖管理,性能分析等方方面面。Go语言抛弃了继承,弱化了OOP,类,元编程,泛型,Lamda表达式等这些特性,拥有良好的性能和较低的上手难度,它适合用于云服务开发,应用服务端开发,以及网络编程。它自带GC,不需要开发者手动管理内存,静态编译和交叉编译这两点对于运维而言也十分友好。
Go语言的缺点同样也有很多,比如令人诟病的错误处理,残缺的泛型,标准库虽然很丰富但内置的数据结构却没几个,interface{}类型满天飞,没有枚举类型,除此之外,Go开发团队非常固执己见,不善于听取社区意见等等。(相比之下,Rust在错误处理,泛型,依赖管理,枚举,接口等方面做的要好得多)
总的来说,我们需要辩证的看待一门语言,作为一门工程化的语言,Go可以很大程度上提高团队的下限,就算开发人员水平再差也能兜底,很少出现一颗老鼠屎坏了一锅粥这种情况,同时因为简单的语法和较低的学习难度,可以让人很快的上手一个项目。尽管Go面世只有十余年不到,但已经有相当多的公司将Go作为了首选语言,也能侧面说明Go正在逐渐流行起来。
顺便一提,Go还是一门完全开源的语言,由社区和谷歌共同维护Go语言的发展,官方地址是在谷歌仓库里,Github上有一份同样的镜像仓库,如果有心你也可以参与到语言的设计当中。
官方网站:The Go Programming Languageopen in new window
谷歌开源仓库:google/go: Google Open Sourceopen in new window
Github仓库:golang/go: The Go programming languageopen in new window
提示
笔者曾经给Go提过PR,如果你想了解如何给Go贡献代码,可以看看我写的这篇文章:如何向Go贡献代码open in new window。
相信很多人应该都或多或少听说过Rustopen in new window,它是一个高性能的通用编程语言,其诞生时间比Go早一年,Go1正式发布的时间是2012年,Rust正式版发布时间为2015年,它们都是较为现代化的语言,这两门语言笔者都很喜欢,它们发展的领域各不相同,如果你不满足于Go的运行效率和表达能力,不妨试试Rust,不过它的学习难度就远没有Go这么简单了。
# 安装Go语言下载:Downloads - The Go Programming Languageopen in new window
Stable Version指的是目前处于维护状态的两个稳定版本,Archived Version指的是不再维护的历史版本,前往更新日志了解