Go语言基础
将在工作中学习的东西整理出来作为一个简单的Go语言基础教程
Go语言
- Go语言(Golang)是Google公司2009年推出的一门"高级编程言语", 目的是为了解决:
- "现有主流编程语言"明显落后于硬件发展速度的问题
- 不能合理利用多核CPU的优势提升软件系统性能的问题
- 软件复杂度越来越高, 维护成本也越来越高的问题
- 企业开发中不得不在快速开发和性能之间艰难抉择的问题
tips:
1.静态语言:
1.1一般都需要通过编译器(compiler)将源代码翻译成机器码,之后才能执行。程序被编译之后无论是程序中的数据类型还是程序的结构都不可以被改变
1.2静态语言的性能和安全性都非常好, 例如C和C++、Go, 但是C和C++的缺点是开发速度慢, 维护成本高
2.动态语言
2.1一般不需要通过编译器将源代码翻译成机器码,在运行程序的时候才逐行翻译。程序在运行的过程中可以动态修改程序中的数据类型和程序的结构
2.2动态语言开发速度快,维护成本低,例如Ruby和Python, 但是Ruby和Python的性能和安全性又略低
- Go 语言是编程语言设计的又一次尝试,是对类 C 语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go 语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。 Go 语言的推出,旨在不损失应用程序性能的情况下降低代码的复杂性,具有“部署简单、并发性好、语言设计良好、执行性能好”等 优势,目前国内诸多IT 公司均已采用 Go 语言开发项目。 Go 语言有时候被描述为“C 类似语言”,或者是“21 世纪的 C 语言”。Go 从 C语言继承了相似的表达式语法、控制流结构、基础数 据类型、调用参数传值、指针等很多思想,还有 C语言一直所看中的编译后机器码的运行效率以及和现有操作系统的无缝适配。 因为 Go 语言没有类和继承的概念,所以它和 Java 或 C++看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说 Go 语言是一门混合型的语言。
Go语言优势和劣势
- 简单易学
- Go语言的作者都有C的基因,Go自然而然也有了C的基因,但是Go的语法比C还简单, 并且几乎支持大多数你在其他语言见过的特性:封装、继承、多态、反射等
- 丰富的标准库
- Go目前已经内置了大量的库,特别是网络库非常强大
- 前面说了作者是C的作者,所以Go里面也可以直接包含c代码,利用现有的丰富的C库
- 跨平台编译和部署
- Go代码可直接编译成机器码,不依赖其他库,部署就是扔一个文件上去就完事了. 并且Go代码还可以做到跨平台编译(例如: window系统编译linux的应用)
- 内置强大的工具
- Go语言里面内置了很多工具链,最好的应该是gofmt工具,自动化格式化代码,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难
- 性能优势: Go 极其地快。其性能与 C 或 C++相似。在我们的使用中,Go 一般比 Python 要快 30 倍左右
- 语言层面支持并发,这个就是Go最大的特色,天生的支持并发,可以充分的利用多核,很容易的使用并发
- 内置runtime,支持垃圾回收
- … …
Go语言的劣势
- 从分布式计算的角度来看,Go 语言的成熟度不及 Erlang(现在已经出现了一些这方面的 Go
语言代码包,我们已经可以看到光明的未来了)。 - 从程序运行速度的角度来看,Go 语言虽然已与 Java 不相上下,但还不及 C(差距正在不断地缩小)。
- 从第三方库的角度来看,Go 语言的库数量还远远不及其他几门主流语言(比如 Java、Python、Ruby 等)。不过与 Go 语言的年纪相比,用它实现的第三方库已经相当多了,并且它们的数量在持续地飞速增长中。
另外,在更深的层面,Go 语言标准库中也有些不尽如人意的的地方,具体如下。 - 从语言语法角度来看,Go 语言语法里的语法糖并不多,这让许多 Python、Ruby 爱好者们对它不屑一顾。另外,变量赋值方式多得有点儿累赘了。最让人遗憾的也是我比较在意的一个地方是,Go 语言不支持自定义的泛型类型。
- 从并发编程角度来看,Go 语言提供的并发模型很强大,但也有一些编写规则需要了解。否则,很容易踩进“坑”里。其实不提倡把这叫作“坑”。因为这些所谓的“坑”,大都是我们由于对原理不熟悉而自己挖出来的。
- 从垃圾回收角度看,Go 语言的垃圾回收采用的是并发的标记清除算法(Concurrent Mark and
Sweep,CMS)。虽然是并发的操作,时间比串行操作短很多,但是还是会在垃圾回收期间停止所有用户程序的操作。这一点多少会影响到对实时性要求比较高的应用。
不过,在 Go 语言 1.3 之后的版本中,这方面的问题已经得到了极大的改善。
虽然 Go 语言还有一些瑕疵,但从整体来看,它已经是一门非常优秀的通用编程语言了。并且,Go 语言在今后的发展上会关注性能、
可靠性、可移植性和一些功能增强,所以上述缺憾会随着版本的推进而逐渐减弱和消失。
Go语言的Logo是地鼠
Go 语言有一个吉祥物,在会议、文档页面和博文中,大多会包含下图所示的 Go Gopher,这是才华横溢的插画家 Renee French 设计
的,她也是 Go 设计者之一 Rob Pike 的妻子。
地鼠的特点是速度快、成群结队、头脑简单
而Go语言的特点正好也是编程速度快、并发性好、简单易学
Go作者
- Go语言是UNIX作者、C语言作者、谷歌V8引擎作者携手打造的, 由谷歌公司2009年推出的一门高级编程言语。
跟着谷歌走吃喝啥都有
Go语言现状
-
多次获得TIOBE年度最佳语言
-
2018年Go语言一度超过Java, 进入编程语言排行榜前三名.
-
从公司角度:
- 许多大厂都已经拥抱 Go 语言,包括阿里巴巴、京东、今日头条、小米、滴滴、七牛云、360等明星公司, 也包括知乎、轻松筹、快手、探探、美图、猎豹移动等等。同时,创业公司也很喜欢 Go 语言,主要因为其入门快、程序库多、运行迅速,很适合快速构建互联网软件产品。
-
从业务维度:
- Go 程序可以在装有 Windows、Linux、FreeBSD 等操作系统的服务器上运行,并用于提供基础软件支撑、API 服务、Web 服务、网页服务等等。
- 在云计算、微服务、大数据、区块链、物联网等领域,Go 语言早已蓬勃发展. 除了语法简单, 性能优越以外, K8S底层架构在云计算的领导地位(
K8S就是Go开发的
), 也让这些各大公司不得不拥抱Go语言。 - 区块链的崛起更进一步带动了Go工程师的需求,市面上大部分区块链明星项目都是用Go开发的, 足以说明Go在分布式系统中的地位,这也就是为什么今年开始,大批金融公司开始招聘Go工程师的重要原因。
-
从薪资角度来看
- 应届生普遍在
4~8K
, 1年左右普遍在10K左右
, 2年~3年普遍在20K左右
- 应届生普遍在
Go语言应用场景
- 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用、内存数据库等
- 云平台开发,目前国外很多云平台在采用Go开
- 服务器编程, 以前你如果使用Java或者C++做的那些事情,都可以用Go来做
- 分布式系统,数据库代理器等
- 它可以做从底层到前端的任何工作
如何学习Go语言
- Go语言被称之为现代化的C语言, 所以无论是从语法特性, 还是作者本身, Go语言都与C语言有着莫大的关系, 所以学习本套课程之前如果你有C语言的基础, 那么将会事半功倍
- 对于初学者而言, 学习编程的捷径只有一条, 那就是多动手
竹子用了4年的时间, 仅仅长了3cm, 从第五年开始, 以每天30cm的速度疯狂地生长, 仅仅用了六周的时间就长到了15米。 其实,在前面的四年, 竹子将根在土壤里延伸了数百平米。 做人做事亦是如此, 不要担心你此时此刻的付出得不到回报, 因为这些付出都是为了扎根。