Golang简史及常见的开发工具介绍

简介: 这篇文章介绍了Go语言的适合学习人群、发展历史、优劣势、学习原因、前景以及学习方法,同时概述了几种常用的Go语言开发工具。

                                              作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.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产品基本上都是付费的产品,也有对应的社区版本。但功能相比于付费版本较少。
目录
相关文章
|
1月前
|
机器学习/深度学习 算法 5G
OTFS调制技术:通往6G的时延-多普勒域革命
OTFS调制技术革新无线通信,将信息从时频域迁移至时延-多普勒域,利用信道的准静态特性与稀疏性,显著提升高速移动场景下的抗多普勒性能与频谱效率,成为6G关键候选技术。
479 1
|
存储 Go
Golang语言基于go module方式管理包(package)
这篇文章详细介绍了Golang语言中基于go module方式管理包(package)的方法,包括Go Modules的发展历史、go module的介绍、常用命令和操作步骤,并通过代码示例展示了如何初始化项目、引入第三方包、组织代码结构以及运行测试。
465 3
|
Web App开发 数据采集 存储
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
本文探讨了如何利用Chrome DevTools Protocol (CDP) 与 Selenium WebDriver 提升浏览器自动化效率,结合代理IP技术高效采集微博数据。通过CDP,开发者可直接操作浏览器底层功能,如网络拦截、性能分析等,增强控制精度。示例代码展示了如何设置代理IP、cookie及user-agent来模拟真实用户行为,提高数据抓取成功率与稳定性。适用于需要频繁抓取互联网数据的应用场景。
1292 3
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
|
Go
Golang语言基础数据类型之复数complex
这篇文章介绍了Go语言中复数(complex)数据类型的概念、表示方法和使用示例,包括complex64和complex128两种类型的复数及其在不同领域的应用场景。
407 5
|
存储 Java 开发者
Java 中 Set 类型的使用方法
【10月更文挑战第30天】Java中的`Set`类型提供了丰富的操作方法来处理不重复的元素集合,开发者可以根据具体的需求选择合适的`Set`实现类,并灵活运用各种方法来实现对集合的操作和处理。
710 113
|
关系型数据库 MySQL 数据库
深入理解MySQL:从基础到高级数据库管理
深入理解MySQL:从基础到高级数据库管理
294 0
|
缓存 监控 数据处理
【编程底层原理】从播放音乐的网页中提取mp3音频文件的两种方式及背后的技术思考【短连接和长连接】
本文介绍了两种从网页提取音乐文件的方法:一是通过IE临时缓存获取,二是利用开发者模式捕捉网络流量并下载音频URL。同时探讨了网页播放音乐的技术实现,包括短连接和长连接的区别及其适用场景,以及数据传输中的阻塞概念。
2035 0
|
Linux 数据处理
Linux中的localectl命令:深入了解与应用
`localectl`是Linux中用于管理区域设置的`systemd`工具,涉及日期、时间、货币格式等。它通过修改配置文件调整系统本地化,并确保数据处理工具的正确运行。主要功能包括列出所有区域设置(`list-locales`)、设置主区域(如`set-locale LANG=en_US.UTF-8`)和查看当前状态。使用时注意理解区域设置差异,备份配置,测试设置效果,并保持系统一致性。查阅文档以获取更多操作详情。
|
缓存 前端开发 Java
解锁Freemarker的神秘面纱:深入了解模板引擎的奇妙世界
解锁Freemarker的神秘面纱:深入了解模板引擎的奇妙世界
241 0
|
Ubuntu 安全 Linux
linux常用发行版的区别
几种常用的ubuntu cent redhat debian fedora arch kali