Tony Bai · Go 语言第一课
Tony Bai
资深架构师,tonybai.com 博主
21492 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 59 讲
开篇词 (1讲)
结束语 (1讲)
Tony Bai · Go 语言第一课
15
15
1.0x
00:00/00:00
登录|注册

01|前世今生:你不得不了解的Go的历史和现状

Go语言的历史发展趋势
技术成熟度曲线的应用
全球范围的Gopher数量
Go语言在云计算基础设施领域的应用
Go 1.0版本的发布
Go语言的吉祥物
Go语言项目的开源
Go语言的第一次公开
Go语言的迭代设计和实现
Go语言的命名
新编程语言的初步构想
设计目标
2007年9月20日的讨论
罗伯特·格瑞史莫
罗伯·派克
肯·汤普森
Go语言相较于传统的静态编译型编程语言(如C、C++)的改进
Go语言的发展趋势
技术成熟度曲线的应用
Go语言的影响力和用户数量
Go语言的发展趋势
Go语言的影响力和用户数量
Go语言的发展
Go语言的诞生
Go语言的创始人
思考题
Go语言的值得性
了解Go语言的历史和现状
前世今生:你不得不了解的Go的历史和现状

该思维导图由 AI 生成,仅供参考

你好,我是 Tony Bai。
今天是我们的第一堂课。第一堂课的开场,我要做的事很简单,就想跟你聊一聊 Go 语言的前世今生。
我一直认为,当你开始接触一门新语言的时候,你一定要去了解它的历史和现状。因为这样,你才能建立起对这门语言的整体认知,了解它未来的走向。而且,也能建立你学习的“安全感”,相信它能够给你带来足够的价值和收益,更加坚定地学习下去。
所以,在这一节课,我就来跟你聊聊 Go 的前世今生,讲清楚 Go 到底是一门怎么样的语言,Go 又是怎么诞生的,它经历了怎样的历史演进,它的现状和未来又会如何?
无论后面你是否会选择学习 Go 语言,无论你是否会真正成为一名 Go 程序员,我都建议你先了解一下这些内容,它会让你对编程语言的发展有更进一步的理解。
首先,我们就来看看 Go 语言是怎么诞生的,这可以让你真实地了解 Go 的诞生缘由、设计目标,以及它究竟要解决哪些问题。

Go 语言是怎样诞生的?

Go 语言的创始人有三位,分别是图灵奖获得者、C 语法联合发明人、Unix 之父肯·汤普森(Ken Thompson),Plan 9 操作系统领导者、UTF-8 编码的最初设计者罗伯·派克(Rob Pike),以及 Java 的 HotSpot 虚拟机和 Chrome 浏览器的 JavaScript V8 引擎的设计者之一罗伯特·格瑞史莫(Robert Griesemer)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Go语言的前世今生:从三位创始人的初步构想到Go语言项目的开源,再到Go 1.0版本的正式发布,Go语言经历了一段快速发展的历程。Go语言的创始人包括肯·汤普森、罗伯·派克和罗伯特·格瑞史莫,他们在2007年的一次讨论中决定设计一门新的编程语言,以解决C++语言的复杂性和编译速度慢的问题。经过早期讨论,Go语言的设计逐渐成熟,吸引了更多有才华的程序员加入到Go核心开发团队中。Go语言于2009年开源后,迅速吸引了全球开发者的关注,成为了著名编程语言排行榜TIOBE的年度最佳编程语言。2012年3月28日,Go 1.0版本正式发布,标志着Go语言的正式成熟。自此,Go语言不断发布多个大版本更新,逐渐成为一门备受关注的编程语言。整个过程展现了Go语言的诞生缘由、设计目标,以及它的发展历程,为读者提供了对Go语言整体认知的机会。 Go语言在云计算基础设施领域拥有广泛应用,如Docker、Kubernetes等,以及用户数量快速增长。通过Gartner的技术成熟度曲线和TIOBE编程语言指数排行榜的分析,Go语言经历了技术萌芽期、期望膨胀期、泡沫破裂期,最终进入稳步爬升的光明期。未来,Go语言有望在2022年初发布支持Go泛型特性的Go 1.18版本,进一步推动其发展。 总体而言,Go语言经历了快速发展,已成为备受关注的编程语言,具有广泛的应用前景和持续的发展潜力。对于开发人员来说,现在是学习Go语言的最佳时机。 Go语言相较于传统的静态编译型编程语言(如C、C++),在解决C++语言的复杂性和编译速度慢的问题上做出了改进,展现出了极高的潜力和持续的活力。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Tony Bai · Go 语言第一课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(43)

  • 最新
  • 精选
  • lesserror
    Tony Bai,你好。文章读完了,写的很好。关于文中有几点疑问,麻烦解答一下。 1. “为 Go 语言实现了一个 gcc 的前端?” 怎么理解这个“前端”的意思。 2. “这样,我们通过显式转型就可以让一个普通函数成为满足http.Handler接口的类型了。” 这里的“显示转型”该怎么理解呢? 3. 能否解释一下“运行时”这个概念呢? 好多文章都是一笔带过,想知道到底是一个什么概念。

    作者回复: 这三个问题问的都非常棒👍 这里是第一讲,因此很多技术术语可能没有更细致的解释,随着课程的展开,一些术语在后续的课程讲解中都会涉及到。 既然提出这些问题了,我就来简单解答一下。 第一个问题:什么是编译器的前端?在计算机专业编译原理课上大家可能都会学到一个编译器的完整编译过程包括:词法分析,语法分析,类型检查,中间代码生成,代码优化,目标代码生成,目标代码优化等几个阶段。从词法分析到中间代码生成,这就是编译器前端所要负责的事情。而代码优化和目标代码生成,则是编译器后端的职责。 文中提到了实现了一个gcc的前端,就是实现了一个程序,这个程序可以读取go源码并通过词法分析、语法分析、类型检查,最终生成中间代码,而这个中间代码可以被gcc后端所识别并生成最终目标代码。 第二个问题:什么是显式转型?这是一个语法层面的术语。举个简单例子,在Go中,如果一个变量的类型为int,但我要将其与另一个int64类型的变量进行加法运算,我们不能直接将它们相加,我们必须将它们显式的转换为同一类型后才能相加,这里的转换过程就简称为显式转型,这个例子转换为代码就是: var a int = 5 var b int64 = 6 c := int64(a) + b 其中的int64(a)就是对变量a进行显式转型。 第三个问题,什么是go运行时? go 运行时,也称为go runtime。 它在那里?其本身就是每个go程序的一部分,它会跟你的源码一起编译并连接到目标程序中。即便你只是写了一个hello world程序,这个程序中也包含了runtime的实现。 它在我的程序中具体负责什么?runtime负责实现go的垃圾收集、并发、内存堆栈管理以及Go语言的其他关键功能。 它的代码在哪里?它大部分以标准库的形式存放在每个Go发布版的源码中。 感谢对本专栏的支持!

    2021-10-13
    13
    152
  • 罗杰
    相比 C/C++ 每个平台的支持问题,Go 的表现简直好太多了。但有个问题,我疑惑了好长好长时间了,希望 Tony 老师解答:printf 能格式化字符串,换行就要手动添加 "\n",println 又不能格式化字符串。我想知道为什么要这样的设计?在看我来这就是特别反人类的设定,Rust 的 println!("{}", a); 才是符合直觉的。

    作者回复: 净给我出难题😝 这个问题我是这么看的,printf是go提供的标准格式化io的函数,它能实现你所期望的所有功能。与c语言的printf是对等的。但println这个函数你可以看成是一种“语法糖”,它本身就是一个特例,你可以用go doc看看println的manual,println原语义就是使用一种默认的格式输出数据到stdout上。你认同这种默认格式,你就使用println,简化你的代码。否则,你就用printf就好了。

    2021-10-14
    2
    30
  • 文经
    我刚转到Go一个半月,之前主要做iOS开发。觉得App开发的天花板太低了,就坚决转型了。 我看完《Go程序设计语言》和其它一些书,也上了极客时间的《Go训练营》。 但是都没有很详细的提到Go的历史和现状,正如白老师所说,了解Go语言的前世今生能够对这门语言更有信心。很高兴今天加入这个专栏,赶上进度,跟着白老师好好学习。

    作者回复: 加油!

    2021-10-26
    4
    16
  • 麦芽糖
    Go 的但是是因为3个前辈在编译 C++ 的时候需要等待很久,在这段时间内他们交换了对一门新的语言的想法。 有了想法,就有定义,于是他们开始设想 Go 的特性。如 ● 编译速度提升 ● 修复缺陷 ● 摈弃C++不好的地方 ● 补全想要的功能 ● 并发能力 为什么是 Go ? 因为这个单词很简单。 至于有人说 Golang,其实没有关系,Golang 仅仅是 Go 的官方网站,因为 go.com 被注册了。 2008 年 Go 就诞生了,团队逐步扩大,2009 年开源,2009-11-10 被定为诞生日。 Go 的吉祥物是地鼠,Go 程序员叫 Gopher。 Go 能用在生产环境是有个节点 Go 1.5,这个版本解决了 Go 的 GC 回收问题。 Go 的现状挺好的。 现在的公司在用,而且公司的业务是对性能要求高的。 前公司也是从 python 转型到 Go。 而且之前的同事在转型到后台的时候也会选型 Go,也即是说会越来越多的公司在选择后端语言的时候会选择 Go。 而且 Go 的程序员挺难招到的。 我了解到 Docker 是用 Go 写的。 从大数据来看一门语言的生命周期,也能看得出来在 5 年内 Go 会引来爆发期。 云也倾向于 Go 语言。

    作者回复: 👍

    2022-01-13
    13
  • 布凡
    dapr也是go编写

    作者回复: 是的,微软牵头推出的云原生分布式应用开发框架dapr的默认实现就是用的Go。

    2021-10-13
    10
  • Jack
    老师怎么看待Go和Rust的比较?

    作者回复: 以前在微博上发过一个观点:让一个习惯了go编程的gopher去用rust,就好比开惯了自动挡汽车的司机去开手动挡,虽然能省些油,传动效率高,但换挡时机和换挡动作还得花很长时间去练习,这个前提还是这个司机之前拿的是C1驾照(C/C++出身)。

    2022-07-16
    9
  • 重洋
    老师,作为JAVA语言开发者,如果想要研究k8s、云原生领域,go语言需要掌握到什么程度呢?

    作者回复: Go入门后,就基本可以看懂大部分Go应用层源码。如果要研究k8s、docker等平台的原理,那么还有一些网络、存储等语言之外的东西需要学习。

    2021-10-26
    3
    7
  • Ali
    老师 Go目前企业比较流行的微服务框架有哪些

    作者回复: 我这类框架用的少,我了解的用的比较多的,包括: - https://github.com/go-kit/kit - https://github.com/go-micro/go-micro - https://github.com/go-kratos/kratos - https://github.com/zeromicro/go-zero 等等吧。

    2022-11-21归属地:北京
    5
  • 西红柿牛男
    go有计划加入机器学习库吗?

    作者回复: 机器学习目前python一家独大。其他语言包括go都在努力抢市场份额。go在机器学习方面的成果还不那么显著,但从几个go机器学习相关的开源项目的活跃度来看,go社区还在积极努力。可以看看像gonum、spago这样的项目。

    2021-10-18
    5
  • 黄伟伟
    这个教程有对应源码吗

    作者回复: 有的,每篇最后一讲的实战课都会有完整源码在 https://github.com/bigwhite/publication/tree/master/column/timegeek/go-first-course。其他讲中的源码基本都是copy即可run的。

    2023-01-28归属地:福建
    4
收起评论
显示
设置
留言
43
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部