这几年大火的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从入门到进阶》,作者:小生凡一。
谢邀,建议您继续深入学习Java体系,而不是急着学习其他语言。理由如下:
① 精通一门语言要比熟悉两门强太多。 不论是Java,还是Go语言,都只是解决问题的工具,无非是语法格式不同罢了。这时精通一门就比熟悉两门强太多,尤其当遇到复杂问题,需要深入原理分析时,如果对语言只是熟悉,那很难彻底解决问题;
② 学语言很容易,但是用语言解决复杂问题很难。 如果只是开发增删改查的应用,你可以只用熟悉使用语言和框架即可,但如果要解决一些复杂问题,例如开发一个适合自己的框架或服务时,就需要熟悉数据结构与算法,程序设计模式,编程思想,底层原理,网络传输协议等知识点,不然就只能望洋兴叹了;
Python不错,语法简单,很容易入门,作为第二门语言很合适,而且现在看起来发展趋势很好,物联网,人工智能,大数据,国内这类岗位还没达到饱和状态,抓紧时间占坑吧。还有一点,薪资相对来说比较高一些。
先把Java系统的好好学习一下,深入学习,熟练掌握了,以后在转其他的方向也是比较容易的,能快速上手。在学校里学习的那些远远达不到企业所需要的标准,都是比较基础的,详细的可以到招聘网站上去了解一下Java相关岗位的任职要求,都需要那些技术才能满足企业的用人需求。
以前学习的Java学习路线,可以了解一下,还是有很多知识点需要学习的。
1、Java基础知识点
2、Java高级技术
3、web前端
4、Java web编程 (核心阶段,着重掌握)
5、框架
6、综合项目
7、企业专题
具体的可以看下“如鹏网”的Java学习路线,最开始学习Java就是利用学校的空余时间在“如鹏网”上系统的学习的,有网络的地方就可以学习,灵活安排学习进度,大三就开始工作了,拿着薪资上大学。
有新的课程更新了,也是可以 继续来学习的,比如说:分布式、设计模式、前端技术、网络支付、全文搜索引擎、Docker、WebService等内容。
作为一个普通大学大四的学生我来发下言
首先,你得先把java学好,不要贪多,贪多嚼不烂,而且GO需要跟java没一点关系,你需要的是花一个学期甚至1年把java学精通,要要专攻某一方面。大二了。你要确定你接下来是要走那条路,比如java+安卓这条路,或者java工程师,javaWEB,确定好路子,规划好后面学啥!
虽然我最后啥也没学,不过看的出java非常重要,大二一定要确定好路线了!!!!安路线来学,学校可能教了一大堆理论,自己可以跟着网络教学一路走下去,java学好后,后面就能走的顺利点了。
还有,数据结构,计算机基础,服务器,这些一连串的都要学好,是跟java这条路是一起相关的。