目录
一、我为什么要学习GO语言?
1、接触了Go语言编写的程序
2、工作中遇到高并发的问题
二、Go语言有什么竞争优势?
1、Go语言开发速度更快、更容易,同时可以获得媲美C语言的高性能;
2、快速编译;
3、自由高效:组合的思想、无侵入式的接口
4、拥有强大的标准库
5、 部署方便:二进制文件,Copy部署
6、并发简单
一、我为什么要学习GO语言?
1、接触了Go语言编写的程序
1年之内接触的两个新项目基础都是Go语言,一个是华为的kubeEdge项目,一个是联盟链(区块链的一种应用)。Go语言在这些新事物中的应用让我开始思考,学习Go语言的必要性;
2、工作中遇到高并发的问题
使用java不仅容易出错,而且学习相关的知识的时间成本非常高;而Go语言天生对高并发的良好支持让我看到应对“高并发”编程的简单、高效的办法;
总结:随着技术和项目经验的积累,我已经不满足于简单使用别人做好的框架或者API接口去实现一个应用性的功能,这在IT行业中本来就是比较低端的工种,只要勤奋、认真,什么行业的人2年时间都能干的不错,可替代性太强。如何让自己变成不可替代的人物?挑战高端的技术,完成核心的功能,开发新的框架,设计和制造“新轮子”,不能一直做装配工。
二、Go语言有什么竞争优势?
与C++比,go的开发效率高,具有清晰的依赖管理和全自动垃圾回收机制,代码量大幅减少。
与Java比,更简明的类型系统。
与php比,go在性能上占有明显优势,且通用性和规范性更好,更适合构建大型的软件。
与python比,go在性能上占有明显优势,因为解释型语言与编译型语言在运行速度上不可同日而语,另外go在语法简明和类型系统设计上优于python。
我们都知道,java是面向对象的,在java的编程世界中一切都是对象,java在描述世界的时候采用的是继承机制,而继承机制不足以完全描述世界的本质,所以Java设计出面向切面编程和设计模式来补充它描述世界的能力。而Go语言不同,它对世界本质的理解是composition(组合),所以我们能够看到类似C语言的结构体。
Go语言的特点:
Go语言接受了函数式编程的一些想法,支持匿名函数与闭包。再如,Go语言接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。
Go 语言最主要的特性:
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
总结:
1、Go语言开发速度更快、更容易,同时可以获得媲美C语言的高性能;
2、快速编译;
3、自由高效:组合的思想、无侵入式的接口
Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程、面向接口编程、函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。
4、拥有强大的标准库
5、 部署方便:二进制文件,Copy部署
6、并发简单
并行和异步编程几乎无痛点。Go 语言的 Goroutine 和 Channel 这两个神器简直就是并发和异步编程的巨大福音。像 C、C++、Java、Python 和 JavaScript 这些语言的并发和异步方式太控制就比较复杂了,而且容易出错,而 Go 解决这个问题非常地优雅和流畅。这对于编程多年受尽并发和异步折磨的编程者来说,完全就是让人眼前一亮的感觉。Go 是一种非常高效的语言,高度支持并发性。Go是为大数据、微服务、并发而生的一种编程语言。
Go 作为一门语言致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,它使用起来异常快速并且简单。其唯一的创新之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级方法,而通道是 goroutines 之间通信的优先方式。
创建 Goroutines 的成本很低,只需几千个字节的额外内存,正由于此,才使得同时运行数百个甚至数千个 goroutines 成为可能。可以借助通道实现 goroutines 之间的通信。Goroutines 以及基于通道的并发性方法使其非常容易使用所有可用的 CPU 内核,并处理并发的 IO。相较于 Python/Java,在一个 goroutine 上运行一个函数需要最小的代码。
三、如何学习Go语言
1、阅读Goolgle的开源项目;Go语言是Goolgle的儿子,其开源项目也最有代表性;
go语言值得学习的开源项目推荐
谷歌官方维护了一个基于go语言的开源项目列表:
https://github.com/golang/go/wiki/Projects
其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也有大型如nsq、docker等的项目。
下面推荐几款适合学习的项目:
1、cache2go
https://github.com/muesli/cache2go
比较简单的一个缓存库,代码量很少,适合新手学习,可以学习到锁、goroutines等。
2、groupcache
https://github.com/golang/groupcache
与memcached同一作者,相当于是memcached的go语言实现。
3、nsq
https://github.com/bitly/nsq
消息分发平台,阅读代码可以了解到很多分布式、负载均衡等方面的编程。
4、docker
https://github.com/docker/docker
时下很火的项目,个人感觉适合应用,不适合入门阅读学习,待成为了高手后可以研究下其实现。