初学者入门Golang的学习

 go教练   2019-07-25 16:19   86 人阅读  0 条评论

一、Golang在过去几年取得的重要成绩

2018年可以说是Go在云计算取得了领导地位,kubernetes已经成为了所有云计算公司的底层架构,而且越来越多的互联网公司系统架构迁移到k8s上面,例如github、阿里、腾讯、百度、滴滴、京东等大型企业纷纷拥抱,而这个系统就是Go开发的,很多公司都开始大力的投入工程师在Go开发中来,Go一下子就成为了云计算的核心语言,大家应该都听过一个组织叫做CNCF,云计算基金会组织,下面孵化了一堆的云计算项目, 就可以看到基本上90%的项目都是Go语言开发的,从这个我们可以看出来Go已经成为了名副其实的云计算系统语言。

同时又是Go在第二领域开始发力的一年,我所说的第二领域就是区块链,大家都知道比特币在过去一年可以说迅速的火爆全球,而它的底层技术区块链技术也是开始获得大家的认知,这个可以说是区块链1.0版本应用,而区块链2.0版本应用就是智能合约以太坊开始获得所有人的认知,基本上目前大多数做区块链的公司都是基于以太坊进行二次开发,而以太坊的底层正是Go开发的,同时IBM也开源了他们的fabric,Fabric是一个分布式账本平台方案,主要用于运行智能合约,利用可靠的技术以及可插拔方式实现各种商业应用场景的模块化架构,而且这个系统也是 Go开发的,这两个区块链里面的明星项目都是用Go开发的,足以说明Go在分布式系统中的地位,这也就是为什么今年开始大批量的金融公司开始招聘Go工程师。

 微信截图_20190725094612.png

二、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 // 新增的类型化名

把握住一点:传统的类型定义创造了一个“新类型”,而类型化名并没有创造出“新类型”。

性能优化:

1、编译性能

Go 1.9中,在原先的支持包级别的并行编译的基础上又实现了包函数级别的并行编译,以更为充分地利用多核资源。Go 1.10 的编译性能最大的改变在于cache机制的实现。事实证明cache 机制的使用,在日常开发过程中会很大程度上提升你的工作效率,越是规模较大的项目越是如此。

2、目标代码的性能

这些年Go team在不断优化编译器生成的目标代码的性能,比如在Go 1.7版本中引入ssa后端。Go 1.10延续着对目标代码生成的进一步优化,虽说动作远不如引入ssa这么大。

3、GC性能

GC的性能一直是广大Gopher密切关注的事情,在Go 1.9中依旧继续优化和改善,大多数程序使用1.9编译后都能得到一定程度的性能提升。1.9中尤其提到了大内存对象分配性能的显著提升。Go1.10在减少内存分配延迟以及GC运行时的负担两个方面做了许多工作,但从整体上来看,GC变化不是很大。

三、哪些公司在重点使用Golang?

目前使用Golang的国内国外公司都非常之多,我这边大概的列一下主要的公司。

 微信截图_20190725094636.png

四、重要的Golang开源项目

目前Go里面开源的大项目太多了,大家可以参考我们最近做的知识图谱上面的一些开源项目,包含了云计算、devops、区块链、人工智能、游戏、存储引擎、Web、系统 / 命令行工具、中间件、测试 / 持续交付、文件系统等各方面的开源项目。

 微信截图_20190725094651.png

五、初学者怎么入手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来写,多写就会理解越来越深入。

以上就是今天给大家介绍的初学者入门Golang的学习,如果你还想了解更多关于go语言的知识技巧,可以继续关注我们http://www.fastgolang.com

本文地址:http://fastgolang.com/110.html
版权声明:本文为原创文章,版权归 go教练 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?