回答者:华为云开发者联盟日期:1小时前·华为云开发者联盟官方账号

这几年大火的Go语言该如何学习呢?这篇文章带你学习了解Go语言基础语法,Go语言web实战以及微服务和区块链方面的开发知识。

1. Go语言入门

1.1 简介

Go语言语法简单,保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言:Go = C + Python, 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。Go语言之所以被称为21世纪的C语言,不仅在于它精简的语法和高效的开发,更在于它具有原生支持和易于使用的高并发的特性。

与C语言相同的是Go语言也有指针,能直接操作内存。这也就意味着Go的运行速度是很快的。另外Go语言也能原生支持C语言,CGO模块也大受好评。

附上Go语言基础知识点思维导图

作为一款编译型语言,Go的程序只需要简单几行命令就能在windows下打包成二进制文件并上传到服务器运行,无需安装第三方的包依赖。并且内置runtime,支持垃圾回收。还有语言层面上支持并发,这个就是Go最大的特色。天生的支持并发,Go就是基因里面支持的并发。

下面两张图就很形象说明Go语言的并发。

将线程再分成更细的协程,使得中间等待时候更少,大大提高效率!

所以说,在这个数据量庞大的社会,使用go语言进行并发操作是必备且非常重要的。

1.2 学习资料与网站

Go常用编辑器:

  • Goland:https://www.jetbrains.com/go/download/
  • vscode:https://code.visualstudio.com/

Go基础编程:

  • Go语言中文文档:https://studygolang.com/pkgdoc
  • Go语言菜鸟教程:https://www.runoob.com/go/go-tutorial.html
  • Go语言基础教程: https://github.com/quii/learn-go-with-tests
  • Go Demo:https://gobyexample.com/

Go高级编程:

  • Go调度器GPM模型: https://www.zhihu.com/question/20862617/answer/27964865 **
  • Go的内存布局:https://golang.org/ref/mem
  • Go指针高级:http://www.sohu.com/a/168217543_99930294
  • Go与C混合编程 CGO模块: https://github.com/golang/go/wiki/cgo
  • 垃圾自动回收机制 GC: https://blog.csdn.net/weixin_45304503/div/details/119729349
  • channel阻塞机制: https://blog.csdn.net/weixin_45304503/div/details/119359126

入门推荐书籍

  • 电子书《The Way To Go》: https://github.com/Unknwon/the-way-to-go_ZH_CN
  • 《Go语言核心编程》
  • 《Go语言编程设计》
  • 《Go语言并发编程实战》

2. Go进阶应用

2.1 Web 开发

2.1.1 简介

在我们学习Go语言的基础语法之后,我们可以做一个web网站。那我们用go语言的GIN框架来举例,Gin是一款轻量级的WEB框架。

特点:

  • 封装优雅,降低入门门槛。
  • API友好,支持许多出色的中间件。
  • 源码注释明确,降低阅读门槛
  • 快速灵活,容错方便。

功能概要:

  • RESTful 路由
  • 数据绑定
  • jwt,cors等中间件的使用
  • 会话控制

附上思维导图:

做一个web网站,除了需要Gin框架之外,我们还需要GORM框架。

GORM是Golang语言中一款性能极好的ORM库,Gin框架经常和Gorm搭配使用。

功能概览:

  • 关联(Has One, Has Many, Belongs To, Many To Many, 多态)
  • 钩子函数Hook(在创建/保存/更新/删除/查找之前或之后)
  • 预加载
  • 事务
  • 复合主键
  • 读写分离

附上思维导图:

2.1.2 学习资料及网站

Go中文社区:

GIN:

  • 源码: https://github.com/gin-gonic/gin
  • 中文文档:https://www.kancloud.cn/shuangdeyu/gin_book/949412
  • Gin框架知识点总结: https://blog.csdn.net/weixin_45304503/div/details/120381359

GORM:

  • 源码: https://github.com/go-gorm/gorm
  • 中文文档:https://learnku.com/docs/gorm/v2
  • Gorm框架知识点总结: https://blog.csdn.net/weixin_45304503/div/details/119986588

一些基于Gin+Gorm的应用:

  • Gin+Gorm 电子商场: https://github.com/congz666/cmall-go
  • Gin+Gorm 视频弹幕网站: https://github.com/CocaineCong/BiliBili
  • Gin+WebSocket 聊天室: https://github.com/hezhizheng/go-gin-chat
  • Gin+Vue+Admin 后台管理系统: https://github.com/flipped-aurora/gin-vue-admin

推荐书籍:

  • 《Go Web编程》

2.2 微服务

2.2.1 简介

将应用程序分解成一套较小的互连服务,将单体应用拆分为一系列服务,每个服务都轻量级单独部署,运行在自己的进程中,共同组件整个系统中。每个服务注重自己的核心能力的开发,微服务组件之间采用轻量级别通信方式进行通信,包括RESTful APi。那Go语言的微服务框架有哪些需要学习的呢?

  • Protobuf语法 / Protobuf序列化原理
  • 服务发现 / Consul内部原理
  • 节点服务集群
  • Docker 环境的搭建
  • RPC 简介及原理介绍
  • RPC 与 Protobuf 结合
  • gRPC 的使用
  • go-micro 框架的使用

2.2.2 学习资料以网站

gRPC:

  • 中文文档:http://doc.oschina.net/grpc?t=57966

go-micro:

  • 中文手册:https://www.kancloud.cn/linimbus/go-micro/529030

推荐书籍:

  • 《Go语言高并发与微服务实战》
  • 《Go微服务实战》

2.3 Cloud 云

2.3.1 简介

如今,我们已迎来了云原生时代,我们所有的web程序,app应用都是在云端运行。 而云端就是编译型语言Go语言的主场 。几行命令,就能快速部署到云端。我们所熟知的容器化工具 Docker 和编排工具 K8S 也是基于Go语言的。

对于开发人员来说,容器技术为应用的部署提供了沙盒环境,开发者可以在独立的容器运行和管理应用程序进程,Docker提供的抽象层使得开发人员之间可以保持开发环境相对的一致,因此Docker适合用于应用隔离,搭建沙箱环境。此外,由于Docker容器的轻量化,它也被适用于进行持续集成和持续部署。

我们用Docker举例子,容器化技术到底有什么优势呢?

  • 更高效的利用系统资源
  • 更快速的启动时间
  • 一致的运行环境
  • 持续交付和部署
  • 更轻松的迁移
  • 更轻松的维护和扩展

Docker的核心架构

我们通常会编写Dockerfile对镜像进行build,然后在容器中跑。

  • 镜像: 一个镜像代表一个应用环境,他是一个只读的文件,如 mysql镜像,golang镜像,nginx镜像等
  • 容器: 镜像每次运行之后就是产生一个容器,就是正在运行的镜像,特点就是可读可写
  • 仓库:用来存放镜像的位置,类似于maven仓库,也是镜像下载和上传的位置
  • dockerFile:docker生成镜像配置文件,用来书写自定义镜像的一些配置
  • tar:一个对镜像打包的文件,日后可以还原成镜像

Dockerfile的解析过程

2.3.2 学习资料及网站

Docker:

  • 官网:https://www.docker.com/
  • 中文文档:https://www.kancloud.cn/jingyucloud/docker/216412

推荐书籍:

  • 《深入浅出Docker》
  • 《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》

2.4 BlockChain 区块链

2.4.1 简介

区块链是一个颠覆旧模式的新技术,是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。最近的元宇宙大火,也带动了区块链的热度。

区块链应用最为著名的应用就是比特币,以太坊和超级账本。其中的以太坊和超级账本这两个区块链应用都基于Go语言。

特点:

  • 透明可信
  • 防篡改可追溯
  • 隐私安全保障
  • 系统高可靠性
  • 以太坊的智能合约是solidity,我们可以用Go语言去调用以太坊智能合约。
  • 超级账本的智能合约是Go语言,Go语言搭建超级账本Fabric项目的兼容性更好。

以下列举了以太坊和超级账本的区别

2.4.2 学习资料及网站

区块链这方面的学习资料相对比较少,建议多看书,多研究以下超级账本的源码。因为实际开发应用中,超级账本fabric是用的最多的。

以太坊

  • Go语言调用以太坊: https://blog.csdn.net/weixin_45304503/div/details/119430280
  • Go语言调用智能合约: https://blog.csdn.net/weixin_45304503/div/details/119466277

超级账本Fabric:

源码: https://github.com/hyperledger/fabric

官方文档:https://hyperledger-fabric.readthedocs.io/en/latest/

区块链推荐书籍:

  • 《区块链技术及应用》
  • 《Hyperledger Fabric技术内幕》

3. 总结

Go语言未来可期,Go语言的乐趣不止于此,我们一起加油吧!

本文分享自华为云社区《Golang从入门到进阶》,作者:小生凡一。

回答者:西梧Runtime日期:2022年02月16日

Go语言这几年发展的确实不错,虽然没有实现赶超C++的目标,但是已经很接近了。而这些年也出现了一些Go语言的有名的项目,比如 kubernetes、Docker、Etcd、Tidb等项目。

我这里整理了一份关于Go语言的学习路线,也可以辅助你做判断。

Go语言是一门全新的静态类型开发语言,具有自动垃圾回收、丰富的内置类型、函数多返回值、错误处理、匿名函数、并发编程、反射、defer等关键特征。从语言层面来说天然支持并发,可以充分利用CPU多核,并且非常适合用来进行服务器编程、网络编程和分布式编程等。

在云计算领域,用Go语言编写的云基础项目如Docker、Kubernetes都取得了巨大的成功,别外还有知名的项目如Etcd、consul、flannel等,也都是使用Go语言实现的。

为你提供几张学习Go语言的线路图,从基础到进阶、Web编程、微服务的学习,你可以参考一下。

基础学习

书籍推荐

《Head First Go语言程序设计》、《Go语言学习笔记》、《Go语言趣学指南》、《Go语言编程》

当然,不必所有的书都读,找其中一本学习即可。

在线学习Go语言资料

  1. Go By Example 中文版 : https://gobyexample-cn.github.io,使用代码示例来学习 Go 语言。
  2. Go 面试题 : http://www.topgoer.cn/docs/gomianshiti/mianshiti,也是使用代码示例来讲解 Go,用来准备面试也是很好的。
  3. 无闻大佬的在线入门指南 : https://github.com/unknwon/the-way-to-go_ZH_CN
  4. 跟着单元测试学习 Go : https://github.com/quii/learn-go-with-tests,有中文版。

初级练手项目

  1. starcharts : https://github.com/caarlos0/starcharts,项目的功能是生成 Github 上面的项目的 star 趋势图,核心代码不多,用来练手很合适。
  2. gorched : https://github.com/zladovan/gorched,使用 Go 写的一个小游戏。
  3. pacgo : https://github.com/danicat/pacgo,也是使用 Go 写的一个小游戏,每一步都有详细的描述和代码实现。
  4. wechat-go : https://github.com/songtianyi/wechat-go,微信 web 版 API 的 Go 实现,模拟微信网页版的登录/联系人/消息收发等功能。

Go语言进阶

书籍推荐

《Go程序设计语言》、《Go专家编程》、《Go语言高级编程》、《Go并发编程》

在线学习Go语言资料

1.《Go 语言设计与实现》: https://draveness.me/golang。

2.《Go 语言高级编程》: https://chai2010.cn/advanced-go-programming-book。

进阶练手项目

  1. rosedb : https://github.com/roseduan/rosedb,一个用 Go 实现的简易高效的 k-v 存储引擎。
  2. gochat : https://github.com/LockGit/gochat,一个 Go 语言实现的轻量级 im 系统,对网络方面熟悉或者感兴趣的可以看看。
  3. 7DaysGolang : https://github.com/geektutu/7days-golang,7 天使用 Go 从零实现 web 框架、分布式缓存、ORM 框架,、RPC 框架,代码量不多,但是质量挺不错的

Go Web编程

书籍推荐

《Go Web编程》

在线学习资料

可以学习下 web 框架 Gin、beego:两个框架都比较的流行,选择其中一个其实就可以了,推荐 Gin。官方文档都有中文,照着 demo 敲一下,了解下怎么处理 HTTP 请求的。

其次还需要掌握一下比较流行的 ORM 框架 Gorm,有官方中文文档,照着 demo 敲一下基本上两天就能掌握了,后面遇到不会的再来查。

Web框架相关的,基本上看官方文档就可以了,就不用再去找专门介绍的书籍,没有比官方文章更正宗的资料了。

除框架之外,你还需要学会的是包括但不限于:

  • web的逻辑,Http协议,grpc,session,cookie等这些web的基础知识
  • 数据库方面MySQL、Redis、MongoDB等
  • 中间件Kafka、Etcd等
  • 文件文件处理,XML、JSON、正则等
  • 安全与加密,预防CSRF攻击、XSS攻击、SQL注入等,加密解密等

Go Web项目推荐

  1. gin-vue-admin : https://github.com/flipped-aurora/gin-vue-admin,使用 Gin 框架构建的后台管理系统。
  2. ferry : https://github.com/lanyulei/ferry,基于 Gin + Vue + Element UI 前后端分离的工单系统。
  3. go-admin : https://github.com/go-admin-team/go-admin,Gin + Vue + Element UI 的前后端分离权限管理系统。

Go 微服务

目前 Go 在微服务中的应用也比较广泛,但说实话,微服务是一个太庞大的话题,你不可能把每一个核心的问题都能够搞清楚,而且也没条件,或许只能在公司的具体的微服务生产环境中,才能够对相关的概念有更加深刻的体会。

推荐一本微服务概述的基础书籍《微服务设计》、《微服务架构设计模式》,可以帮助你理解微服务的建模、集成、测试、部署和监控的一些基础知识。

其次,你可以看一下《Go微服务实战》这本书,看后半部分即可,里面其实介绍的还是关于微服务方面的知识。

推荐 Go 语言的微服务框架 GoKit、GoMicro、go-zero、kratos,可以随便选择一个,理解其基本的用法、设计等等。其中 go-zero 和 kratos 是国内开源的,因此都有比较详细的中文文档。

在线学习的资料:

https://ewanvalentine.io/microservices-in-golang-part-1

手把手实现一个简单的 Go 微服务项目,你可以通过这个项目来学习微服务的相关知识,并且有中文版。

Go语言原理研究

如果你对Go语言底层原理感兴趣的话,可以看下这本书《Go语言底层原理剖析》。

开源项目学习

在项目开发过程中,也会用到各种开源项目。一开始没必要直接钻研源码,先要学习开源项目背景,能解决什么问题,开源作者的项目理念,使用了哪些技术等等。

这些清楚以后,可以找自己感兴趣的技术点或者模块去针对性的学习,千万不要想着一开始就想一网打尽式的学习,没有针对性意味着没有重点,没有重点很大概率就会白学或者学到的就会很少。

先推荐几个经典的开源项目供你参考:

  • www.docker.com 使用 docker 来做虚拟化
  • https://github.com/nsqio/nsq 学习消息队列,学习 channel 和分布式
  • https://github.com/coreos/etcd分布式应用

如果你有自己比较看好的开源项目会更好,兴趣永远是前进的第一步。

相对前几年,Go语言的书籍、教程,各种文章都如雨后春笋一般越来越多,学习起来也更加方便,但是同时也要注意不要过度陷入知识碎片而无法自拔,最重要的还是要去系统去学习一下,针对性的练习、实践和应用。

回答者:爱比特编程日期:2019年06月11日·优质科技领域创作者

go(又称golang)是google的三位大牛罗伯特·格瑞史莫(Robert Griesemer), 罗勃·派克(Rob Pike)及肯·汤普逊(Ken Thompson)在2009年推出的编程语言,它是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,很方便的支持协程,支持大并发。在后端开发,微服务,云计算方面应用比较广泛,目前国内很多一线互联网公司的服务都是用golang搭建,学好golang是很前途的。

我认为学好golang有如下三步骤:

1、阅读相关技术书籍

1)go语言程序设计(艾伦A. A. 多诺万著),golang语言基础,是入门首选

2)go语言圣经(Kernighan著),golang语言的权威著作,进阶首选

3)golang的官方文档(https://golang.org/pkg/)

4)golang大牛的演讲和blog()

2、参与开发相关golang项目

1)开始学习时,要边看书变学习,将书中的例子一定自己动手写一遍,运行调试一下。

2)边做项目边学习是成长最快的方法,一定要参与golang项目的开发,你的工作一定要是golang开发。

3、学习和参与优秀的开源项目

阅读优秀开源项目提升自己的技术水平和开阔一些视野

1)beego (https://github.com/astaxie/beego)

国产开源的高性能Web框架,让你快速的开发Go Web应用服务,谢大主笔

2)codis (https://github.com/CodisLabs/codis)

Codis是一个分布式Redis解决方案,其实就是一个数据库代理,让你在使用Redis集群的时候,就像使用单机版的Redis是一样的,对开发者透明。

3)docker (https://github.com/docker/docker)

无人不知的虚拟华平台,开源的应用容器引擎,借助该引擎,开发者可以打包他们的应用,移植到任何平台上。

4)kubernetes (https://github.com/kubernetes/kubernetes)

Google出品,用于调度和管理Docker的开源容器管理系统,利用他,可以方便的管理你的docker实例,哪怕非常多,也是目前最流行的docker管理系统。

5)golang (https://github.com/golang/go)

golang是开源的编程语言,可以阅读golang的源码提升自己

4、总结

经常总结,让经验沉淀下来,有条件可以写博客,也经常看看别人的技术博客

回答者:开悟觉醒中日期:2020年01月18日

非常好的问题。首先我是有三年go语言开发经验的了。回答你这个问题之前,首先要理解如何学习go,是你要达到什么样的级别。就是目标,比如你要达到大师级别。或者你需要用go做什么开发工作?一定要先搞清楚需求,举个例子

1 我要如何学习go才能做web开发

2用go做ai 或者图像处理

3开发以太坊区块链

就web开发而言的话就不同领域需要画一个脑图,就是路线图,把达到目标之前的各个知识点列出来,比如基础go知识,变量,常量,slice. map struct channel go routine 并发等等 还有相关领域的开发工具,的脑图,比如goland vs code 还要需要的linux 命令行, dockers 等等相关路线图 还有gin 框架

但是如果要学图像 ai 区块链还要学习相关基础和框架,比如tensorflow 智能合约 opencv 如果只要学习基础请关注我的头条14天学会go语言,最重要的是要多练!谢谢

回答者:BB莱纳德日期:2023年03月11日

首先,要下载和安装Go语言环境,这就像是安装一个学习工具,我们可以去官网下载并进行安装。

然后,要学习基础语法,就像是学习一门新语言的语法规则,我们需要掌握Go语言的变量、数据类型、控制语句和函数等基本语法。

接着,我们需要写一个Hello World程序来熟悉Go语言的基本语法,就像是学习英语时说出一个简单的句子来练习口语。

在掌握了基础语法后,我们可以学习Go语言的常用库和工具,就像是学习一门语言的常用单词和表达方式一样,这可以帮助我们更快更好地完成编程任务。

通过练习和实践来巩固学习成果,就像是通过口语练习来提高口语水平一样。我们可以在GitHub等网站上找到一些开源项目进行参考和练习。

学习Go语言的高级特性和性能优化技巧也很重要,这就像是提高语言水平和口语表达能力一样,需要不断学习和实践。

最后,加入Go语言社区,参与讨论、分享经验和交流,与其他开发者建立联系,获取更多学习资源和机会。这就像是在语言学习中结交口语朋友一样,可以帮助我们更好地学习和提高。