Golang从入门到进阶 1. Go语言入门

1.1 简介

Go = C + Python21世纪的C语言

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

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

Golang语法

编译型语言

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

image.png

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

image-20211115200055811

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

1.2 学习资料与网站

Go常用编辑器:

Go基础编程:

Go高级编程:

入门推荐书籍

  • 《Go语言核心编程》

image-20211120094714501

  • 《Go语言编程设计》

image-20211120094644994

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

image-20211120094817641

2. Go进阶应用

2.1 Web 开发

2.1.2 简介

GIN

特点:

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

功能概要:

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

附上思维导图:

Go开源宝藏             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

镜像:容器:仓库:dockerFile: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

solidityGo

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

以太坊 超级账本
设计原理 紧耦合 松耦合(二次开发)
执行环境 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