【云驻共创】Golang从入门到进阶

举报
小生凡一 发表于 2021/11/20 15:21:31 2021/11/20
【摘要】 这几年大火的Go语言该如何学习呢?这篇文章带你学习了解Go语言基础语法,Go语言web实战以及微服务和区块链方面的开发知识。

Golang从入门到进阶

1. Go语言入门

1.1 简介

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

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

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

Golang语法

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

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

image.png

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

image-20211115200055811

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

1.2 学习资料与网站

Go常用编辑器:

Go基础编程:

Go高级编程:

入门推荐书籍

image-20211120094714501

  • 《Go语言编程设计》

image-20211120094644994

  • 《Go语言并发编程实战》

image-20211120094817641

2. Go进阶应用

2.1 Web 开发

2.1.2 简介

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

特点:

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

功能概要:

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

附上思维导图:

Go开源宝藏             Gin框架(持续更新)

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

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

功能概览:

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

​ 附上思维导图:

Go开源宝藏  GORM (持续更新)

2.1.2 学习资料及网站

Go中文社区:

GIN:

GORM:

一些基于Gin+Gorm的应用:

推荐书籍:

  • 《Go Web编程》

image-20211120095009487

2.2 微服务

2.2.1 简介

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

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

2.2.2 学习资料以网站

gRPC:

go-micro:

推荐书籍:

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

image-20211120111337746

  • 《Go微服务实战》

image-20211120111529391

2.3 Cloud 云

2.3.1 简介

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

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

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

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

image-20211115203227627

Docker的核心架构

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

image.png

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

Dockerfile的解析过程

image.png

2.3.2 学习资料及网站

Docker:

推荐书籍:

  • 《深入浅出Docker》

image-20211120094918074

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

image-20211120101426135

2.4 BlockChain 区块链

2.4.1 简介

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

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

特点:

  • 透明可信
  • 防篡改可追溯
  • 隐私安全保障
  • 系统高可靠性

image-20211115203242673

  • 以太坊的智能合约是solidity,我们可以用Go语言去调用以太坊智能合约。
  • 超级账本的智能合约是Go语言,Go语言搭建超级账本Fabric项目的兼容性更好。

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

以太坊 超级账本
设计原理 紧耦合 松耦合(二次开发)
执行环境 EVM Docker
平台语言 Go Go
部署难度 相对简单 相对复杂
拓展性 差(设计缺陷)
数据存储 链下完整,链上hash 链下完整,链上hash
代币 借助币奖励矿工和防止攻击 不需要
Spv 支持 不需要,需要自行实现,同区块看本身有关
企业级应用 相对较好 不太好
出块时间 不可控,会越来越长,和区块高度相关 通过实践和交易控制
分叉 硬分叉,需要修复大量bug 暂无
安全漏洞 Solidity语言设计漏洞DAO 暂无
币机制模型 账户模型+分片机制 暂无
开源协议 LGPL3.0 Apache2.0
合约调用 可以 可以
合约语言 Solidity Go
合约终止方式 计步Gas 计时Docker环境

2.4.2 学习资料及网站

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

以太坊

超级账本Fabric:

区块链推荐书籍:

  • **《区块链技术及应用》

image-20211120142312250

  • 《Hyperledger Fabric技术内幕》

image-20211120142231323

3. 总结

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


本文整理自华为云社区内容共创活动:任务29 Go语言如何进阶?
查看活动详情:https://bbs.huaweicloud.com/blogs/308924

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。