作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.Golang概述
1.什么人适合学习Go语言
- 有兴趣学习Go语言的课程的同学;
- 纯零基础用Go语言入门的同学;
- 已经有其他语言功底的同学;
2.Go语言发展历史
Go(又称Golang)是Google的Robert Griesemer,Rob Pike及Ken Thompson开发的一种计算机编程语言。
Go语言是Google推出的一种的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。
Google首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。派克表示,和今天的C++/C一样,Go是一种系统语言。
他解释道,"使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大。"
- 计算机硬件技术更新频繁,性能提高很快,目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU多优势提升软件系统性能;
- 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言;
- 企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度确很慢,同时还存在内存泄漏的一系列困扰需要解决。
Go语言的吉祥物是一个金花鼠(Gordon),由罗布派克(Rob Pike)的夫人设计的。
- golang创始人
- Ken Thompson:
- 1969年:
加入贝尔实验室,在参数Multics(多路信息计算)开发期间,创造B语言。
并用一个月的时间用B语言开发了全新的操作系统UNICS,后来更名为我们熟悉的UNIX操作系统;
- 1971年:
和丹尼斯·利奇(Dennis Ritchie)一起共同发明了C语言。
- 1973年:
和丹尼斯·利奇(Dennis Ritchie)使用C语言重写了UNIX,并安装PDP-11的机器之上。
- 1983年:
美国计算机协会将图灵奖授予汤普森。
- 2000年:
离开贝尔实验室,已退休的汤普森成为了一名飞行员。
- 2006年:
加入Google工作。
- 2007年:
64岁的高龄,与Rob Pike和Robert Griesemer主导了Go语言的开发。
- Rob Pike
- Go语言项目总负责人;
- 贝尔实验室Unix团队成员,参与的项目包括Plan 9,Inferno操作系统和Limbo编程语言;
- UTF-8字符集规范唯二的发明人之一,另一位是Ken Thompson;
- <<UNIX编程环境>>和<<程序设计实践>>这两本书的作者之一;
- 第22届莫斯科夏季奥运会射箭项目的银牌得主;
- 业余天文学家,设计的伽马射线望远镜差点被NASA用在航天飞机上;
- 他的媳妇Renee French就是Go语音吉祥物的设计人;
- Robert Griesemer
- 参与V8 JavaScript引擎的开发
- 参与Java HotSpot虚拟机的研发
- 起源:
- 2007年,Google的几位大牛正在用C++开发一些比较繁琐但是核心的工作,主要是分布式集群,大牛觉得很闹心;
- 此时C++委员会来他们公司做技术演讲,说C++将要添加35个新特性,大牛心里飘过一万个CNM,"C++特性还不够多吗";
- 于是Rob Pike说要不自己搞个简单一点的语言吧,首先名字得简单好记,大腿一拍就叫"go";
- 把事情搞复杂很容易,把事情搞简单才更深刻;
- 发展:
- 2007年09月21日,开始雏形设计;
- 2009年10月30日,Rob Pike宣布了Go语言的存在;
- 2009年11月10日,以完全开源的方式公布了Linux和Mac OSX上的版本,11月22日公布了Windows版本;
- 2010年01月08日,当选2009年内年度语言;
- 2010年05月,谷歌投入使用;
- 2011年04月,Google开始抽调员工全职开发Go语音,并于5月宣布Google APP Engine支持Go语音;
- 2012年03月,Go语言1.0版本发布;
- 2013年05月13日,Go语言1.1版本发布;
- 2013年12月01日,Go语言1.2版本发布;
- 2014年06月18日,Go语言1.3版本发布;
- 2014年12月10日,Go语言1.4版本发布;
- 2015年08月19日,Go语言1.5版本发布,本次更新中移除了"最后残余的C代码";
- 2016年02月17日,Go语言1.6版本发布;
- 2016年08月15日,Go语言1.7版本发布;
- 2017年02月16日,Go语言1.8版本发布;
- 2017年08月24日,Go语言1.9版本发布;
- 2018年02月16日,Go语言1.10版本发布;
- 2018年08月24日,Go语言1.11版本发布;
- 2019年02月25日,Go语言1.12版本发布;
- 2019年09月03日,Go语言1.13版本发布;
- 2020年02月25日,Go语言1.14版本发布;
- 2020年08月11日,Go语言1.15版本发布;
- 2021年02月16日,Go语言1.16版本发布;
- 2021年08月16日,Go语言1.17版本发布;
- 2022年03月15日,Go语言1.18版本发布;
- 2022年08月02日,Go语言1.19版本发布;
- 2023年02月01日,Go语言1.20版本发布;
- 2023年08月08日,Go语言1.21版本发布;
- 2024年02月06日,Go语言1.22版本发布;
- ...(每年发布2个版本,持续迭代!)
参考链接:
https://golang.google.cn/doc/devel/release
总结:
- Google公司开源;
- 编译型语言;
- 21世纪的C语言;
2005年之前的电脑基本上都是单核的,在此之前诞生的语言也没有考虑到多核优化的问题哟~
2007年在Golang语言诞生默认是跑满所有核心的!
3.Go语言的优劣势
优势:
- 语法简单,易于学习,类C的语法,同时比C/C++简洁和干净;
- 自带GC,方便使用(C++需要手动释放内存,很头痛...);
- 快速编译,高效执行;
- 简单的依赖管理(Java项目需要安装各种依赖包后才能正常运行起来...);
- 并发编程,轻松驾驭;
- 静态类型,同时有一些动态语言的特征(var 声明);
- 标准类库,规范统一;
劣势:
- 不支持泛型(官方说在未来的版本会支持泛型)
- 不支持动态加载代码(各种Linux的"xxx.so"文件)
- 发展时间短,生态不及Java,C++庞大(并不是说go的第三方库少,只不过各个第三库的选择数量可能没有其他语言多)
总结:
- 简单易学习;
- 开发效率高;
- 执行性能高;
4.为什么要学习Go语言
- Go语言的用途:
- 巨型中央服务器领域;
- 高性能分布式领域;
- 游戏服务端开发;
- 复杂事件处理;
- 对实时性要求很高的软件开发;
- 可以在Inter和ARM处理器上运行,因此也可以在安卓上运行;
Go语言的应用领域:
如下图所示。
Go微服务开发:
- 零依赖,让我们可以最小化我们的镜像,节省存储与拉取镜像带宽;
- Runtime使用更小的内存,对比Java的JVM;
- 更好的并行能力,当你真的需求更多CPU的时候;
- 更高的性能,对比解释性语言,在处理数据以及并发方面优势明显;
- 简单,学习成本低,内部人员可以转入Go阵营;
- 使用Go能更接近云原生生态,比如Docker,K8S,harbor都是用Go开发的;
总结:
- 机会多;
- 薪资高;
- 发展好;
5.Go语言的前景
如上图所示,我们在Boss直聘上可以看到针对Go语言的工资薪资待遇还是非常可观的哟~
6.学习Golang语言方法
(1)与其他编程语言对比学习;
(2)多写代码;
(3)在实际工作中使用Go语言;
(4)培养自主学习能力,坚持;
(5)做笔记,写博客,将学会的内容讲解出来;
二.Go语言开发工具介绍
1.Visual Studio code
Microsoft产品(简称VSCode),一个运行于Mac OS,Windows和Linux之上的,默认提供Go语言的语法高亮。
安装Go语言插件,还可以支持智能展示,编译运行等功能。
下载地址:
https://visualstudio.microsoft.com/zh-hans/
多版本选择:
https://code.visualstudio.com/Download
2.Sublime Text
可以免费使用,默认也支持Go代码语法高亮。
只是保存次数达到一定数量之后就会提示是否购买,点击取消继续使用,和正式注册版本没有任何区别。
下载地址:
https://www.sublimetext.com/download
3.Vim
Vim是vi发展出来的一个文本编辑器,代码补全,编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
4.Emacs
Emacs传说中的神器,她不仅仅是一个编辑器,因为功能强大,可称它为集成开发环境。
5.Eclipse
Eclipse是开源免费的IDE工具,并提供GoEclipse插件。
6.LiteIDE
LitelIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),是中国人开发的。
7.JetBriains IDE
JetBrains公司的PhpStrom,WebStrom和PyCharm,Goland等IDE都需要安装Go插件。
只不过JetBrains产品基本上都是付费的产品,也有对应的社区版本。但功能相比于付费版本较少。