Golang在过去一年取得的重要成绩(包括重点项目的成绩)
kubernetes已经成为了所有云计算公司的底层架构,而且越来越多的互联网公司系统架构迁移到k8s上面,例如github、阿里、腾讯、百度、滴滴、京东等大型企业纷纷拥抱,而这个系统就是Go开发的,很多公司都开始大力的投入工程师在Go开发中来,Go一下子就成为了云计算的核心语言,大家应该都听过一个组织叫做CNCF,云计算基金会组织,下面孵化了一堆的云计算项目,https://www.cncf.io/ 就可以看到基本上90%的项目都是Go语言开发的,从这个我们可以看出来Go已经成为了名副其实的云计算系统语言。
Golang最近几次版本更新要点
最近两个大版本分别是Go1.9和Go1.10,我就对于这两个版本里面带来的几个新特性大概的介绍一下。
语言层面:
Type alias
我们都知道Go代码重构过程中最大的难点就是兼容性,而Go里面我们一旦导出的变量、函数等如果想要再次重构,那么就会变得非常困难,这个特性的引入就是为了解决这个问题的,最初由Robert Griesemer提出来这个特性的,计划在1.8版本加入,但是时间紧迫推迟到了1.9版本才加入。
官方对type alias的定义非常简单:
An alias declaration binds an identifier to the given type.
我们怎么来理解新增的type alias和传统的type definition的区别呢?
type T1 T2 // 传统的类型定义vs.type T1 = T2 //新增的类型化名
把握住一点:传统的类型定义创造了一个“新类型”,而类型化名并没有创造出“新类型”。
性能优化:
编译性能
Go 1.10的编译性能最大的改变在于cache机制的实现。事实证明cache机制的使用,在日常开发过程中会很大程度上提升你的工作效率,越是规模较大的项目越是如此。
2.目标代码的性能
这些年Go team在不断优化编译器生成的目标代码的性能,比如在 中引入ssa后端。Go 1.10延续着对目标代码生成的进一步优化,虽说动作远不如引入ssa这么大。
3.GC性能
GC的性能一直是广大Gopher密切关注的事情, Go 1.10在减少内存分配延迟以及GC运行时的负担两个方面做了许多工作,但从整体上来看,GC变化不是很大。
标准库:
增加monotonic clock支持
2017年元旦之夜,史上第27次闰秒出现,正是因为这个闰秒的出现,欧美知名CDN服务商Cloudflare的DNS出现大规模故障,导致欧美很多网站无法正常被访问。之后,Cloudflare工程师分析了问题原因,罪魁祸首就在于golang time.Now().Sub对时间的度量仅使用了wall clock,而没有使用monotonic clock,导致返回负值。一般来说,wall clock仅用来告知时间,mnontonic clock才是用来度量时间流逝的。为了从根本上解决问题,Go 1.9在time包中实现了用monotonic clock来度量time流逝,这以后不会出现时间的“负流逝”问题了。这个改动不会影响到目前大家对timer包的方法层面上的使用。
2.增加math/bits包
在一些算法编程中,经常涉及到对bit位的操作。Go 1.9提供了高性能math/bits package应对这个问题。
3.提供了一个支持并发的Map类型
Go原生的map不是goroutine-safe的,尽管在之前的版本中陆续加入了对map并发的检测和提醒,但gopher一旦需要并发map时,还需要自行去实现。在Go 1.9中,标准库提供了一个支持并发的Map类型:sync.Map
4.增加strings.Builder
strings包增加一个新的类型:Builder,用于在“拼字符串”场景中替代bytes.Buffer,由于使用了一些unsafe包的黑科技,在用户调用Builder.String()返回最终拼成的字符串时,避免了一些重复的、不必要的内存copy,提升了处理性能,优化了内存分配。
5.支持profiler labels
“Profiler labels in go”详细介绍了profiler labels的用法,可以参考,这里不赘述了。
哪些公司在重点使用Golang,哪些公司对Golang有兴趣?
目前使用Golang 的国内国外公司都非常之多,我这边大概的列一下主要的公司
国外公司列表
公司名 | 产品或网址 |
Kubernetes,vitess,seesaw | |
Docker | moby |
hyper | hyper |
CoreOS | etcd, rocket |
Prometheus | Prometheus |
grafana | grafana |
国内公司列表
公司名 | 产品或网址 |
积梦智能 | https://jimeng.io |
七牛 | https://qiniu.com |
滴滴 | |
百度 | |
阿里云 | |
腾讯云 | |
UCloud | |
PingCAP | tidb |
更多的公司可以参考这里:https://github.com/golang/go/wiki/GoUsers
重要的Golang开源项目
目前Go里面开源的大项目太多了,大家可以参考我们最近做的知识图谱上面的一些开源项目,包含了云计算、devops、区块链、人工智能、游戏、存储引擎、Web、系统/命令行工具、中间件、测试/持续交付、文件系统等各方面的开源项目。
详细地址:https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0
初学者怎么入手Golang,推荐一些学习型的项目
我觉得学习一门语言最重要的就是做到三点,第一看基础知识,第二学习抄代码,第三学习写代码
第一点,很多人都觉得上来就动手写,但是你基础的东西都没掌握,怎么写呢?欲速则不达,所以基础的东西还是必须要先掌握好.这里推荐几个基础的入门材料:
https://tour.golang.org/#1
邢星翻译的 https://github.com/mikespook/Learning-Go-zh-cn
Go byExample https://gobyexample.com/
我觉得你把这几个基础掌握之后就可以开始抄袭代码了,如果你之前有PHP的开发经验,那么也许我写的这本书对你了解golang有帮助, https://github.com/astaxie/build-web-application-with-golang
第二点,我们很多时候开始写代码都是没什么思路,也无从下手,但是我们可以模仿别人写代码,上海俗话里面常说"吃大户,用大户,消灭大户",我们就是"看代码,抄代码,最后自己写代码".这里给你几个入门级别的代码看看学习一下:
https://github.com/hoisie/web 很简单,就是学习他的路由怎么实现的,如何编写自己的路由
https://github.com/icub3d/home/这是一个Go+ AngularJS的实现,看看如何做API应用
最后我列一下你可以自己参考去实现的一些功能,我当初培训我们战虎班的同学就是用这些来一起学习的.
日志分析
IP库分析
管理后台查看分析日志
第三点,自己写代码,这个时候就是已经对golang有了一定的了解了,那么我们就可以开始做自己的项目了,做项目最想就是快速开发,那么我就推荐你
https://github.com/astaxie/beego 使用beego框架可以很快速的开发你的Web或者API应用
https://www.docker.com/ 使用docker来做虚拟化
https://github.com/nsqio/nsq 学习消息队列,学习channel和分布式
https://github.com/coreos/etcd 分布式应用
这个阶段就是找各种东西用golang来写,多写就会理解越来越深入.
第四届 Gopher China 大会4月将在上海举办,今年也是第一次增加了会前的 培训 。本届的大会无论从规模,内容都将有更多值得大家期待的!
相关阅读:
点击阅读原文报名2018 Gopher China 大会,最后一波早鸟票!
4月1日起恢复888原价〜
Go 中国粉丝独家福利优惠码“GopherChina”
报名输入可享85折优惠!数量有限,先到先得哦〜
有疑问加站长微信联系(非本文作者)