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

对于应该选择go还是python,相信很多答主已经分析的相当透彻了,接下来上一份go语言入门到进阶的学习路线及资料。

这几年大火的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从入门到进阶》,作者:小生凡一。

回答者:你看我独角兽吗日期:2018年07月24日

谢邀。首先,不要限制住你的思维。现在想学习一门编程语言,不一定是go或是Python,而是根据你想要做什么、具体是什么而定,这取决于你的目标,真的。

如果您想进行Web编程,请学习 Javascript ,因为它允许您对前端和后端进行编码(通过Node.js)。

如果你想进行系统编程,请学习 C 。Microsoft Windows和Unix / Linux / OSX都是C语言的核心,因此可以从C语言无缝地与大部分系统接口。如果您愿意,可以让您进入嵌入式编程。

如果您对算法体系结构背后的数学理论以及学习构建高效,可组合,解耦,可维护系统背后的科学感兴趣,并使用类型系统来证明代码的正确性以获得最终的安全性和稳定性,那么请学习 Haskell 。 Haskell强调使用纯数学函数构建软件,IMO是有史以来设计最好的语言之一。

但是,如果您对代码和算法的结构感兴趣,并且编写它们的方式与编写lambda演算时的方式非常相似,并且有兴趣学习将代码作为数据和数据处理为代码,那么请学习 Lisp 。有趣的是,Lisp很容易在非常快的速度上变得疯狂。 Lisp是非常高级的,所以掌握这种语言我认为给你最好的机会,能够很快写出很多有用的东西(我建议使用常见的Lisp方言来实用)。

如果您有兴趣在跨平台遗留系统和大型企业环境中工作,并且学习一种在企业软件开发中根深蒂固的语言,至少在接下来的20年内它可能不会消失,那么学习Java。

如果您对大数据感兴趣并构建处理数PB数据的机器学习和分析应用程序,请学习 Scala 。这里有人会说Java,但我在这个领域的经验是Java在这个问题领域的扩展性不够好。 Scala在不牺牲性能的情况下为您提供更大的灵活性,并且在这个领域迅速普及。

但是,如果您只是对大数据的数据科学和发现部分感兴趣,请学习 Python ,因为它拥有统计建模和分析大数据集样本特征的最佳工具。 Python还为您提供服务器端Web编程和系统脚本。

正如您所看到的,您应该学习的1种语言取决于您想要做什么。

这并没有一个正确的答案,永远都不要限制住自己的思维,希望我的问题对您有一定帮助。


我会在这里发布所有与科技、科学有关的有趣文章, 欢迎订阅我的头条号 。偶尔也回答有趣的问题,有问题可随时在评论区回复和讨论。

(码字不易,若文章对你帮助可点赞支持~)

回答者:讲出来怕你笑日期:2018年04月02日

如果题主不是从事软件开发,只是因为个人兴趣,我建议学习python,很多库,能很方便的实现很多有趣的东西。但如果题主从事软件开发,在这里提这个问题,我觉得你应该学习一个可以和你本职工作有相关性的。而不用去问别人应该怎么选择

回答者:Go语言中文网日期:2019年06月06日·优质科技领域创作者

再学一门编程语言,选 Go 还是 Python ?这个问题需要从几个角度考虑!

一、现在掌握的语言是哪种类型

首先肯定是服务端开发,要不然应该不会说选 Go 还是 Python。

1、如果现在掌握的语言是动态语言,比如 PHP,那么建议学习静态语言 Go。

首先 PHP 容易学习,容易使用,而 Go 也有这些优秀的特质!

其次,你已经学会了一门动态语言,了解动态语言的写法,甚至深入了动态语言的原理,是时候系统学习一门静态强类型语言了,而 Go 绝对是很好的选择!

再次,现在微服务架构很流行,而 PHP 在这方面会有点难受,Go 这方面却表现不错,除了开源界一些流行的框架外,大厂也有很好的 Go 微服务实践!

最后,在 Docker、k8s 大势横行的年代,我们没有理由不接触下它们的实现语言 Go!

2、如果现在掌握的是静态语言,比如 Java,我建议可以看看动态语言 Python!

Python 有它很多独特的东西,比如使用缩进确定代码块。同时,Python 是一门很通用的语言,它在科学计算领悟、Web 领悟、人工智能领悟、运维领悟等都有很好的作用,特别是最近几年的人工智能领悟,Python 可谓风光无限!

同时,Python 简单易学,拥有强大的社区支持,强大的类库、生态,它表现能力强,很多语言很长的代码,它可以很短的代码实现。如果想深入了解动态语言的机制,Python 无疑是很不错的选择!

二、学习另外一门语言想用来干什么

学习任何东西,我们还是希望有实际用处。学习编程语言也是如此,而且如果学习了不用,很容易就会忘记,使用是很好的掌握技能的方式。

如果想要在科学计算、AI 等领域使用,建议学习 Python,虽然 Go 在 AI 方面也有一些库,有人在使用,但相比而言,Python 是最成熟、最火热的。从每月的编程语言排行榜可以看出,AI 的兴起,对 Python 还是有很大的助推作用。

如果想用于 Web API、微服务、云计算、中间件等领域,推荐学习 Go 语言。Go 语言号称是云计算时代的语言,在这方面确实有它的优势。很多大厂,比如今日头条、滴滴、知乎等都在大规模使用 Go 语言。

总结

综上,如果你现在使用的是 PHP 这样的动态语言,且继续从事相同的行业,Go 绝对是值得学习的语言,而且,我建议一定学习下 Go;如果想从事 AI 方面,可以学习 Python,或者现在使用的是静态语言,可以尝试下 Python 这种动态语言。

回答者:千锋教育日期:2019年05月07日

编程语言,其实都是触类旁通的,只要你精通一门,不管是面向过程,还是面向对象,不管是静态语言还是动态语言,其实精髓和核心思想都大同小异。

Java、Ruby,Python,Go,PHP。。等等吧,只要真的学会一门,其他学起来都不是难事。

关键是你的问题是你们公司要求转Go,如果不转,就意味着你可能要失业,这个你要考虑好。

在我看来,我个人是比较喜欢公司要求的,相当于带薪学习,这可不是每家公司都能做到的,在我看来都相当于员工福利了。。

而Go和Python,都是一门编程语言而已,关键是看他们的生态圈,如果公司让你们转,证明你们公司有这方面的业务,那你就放心大胆的去学Go,而且还能快速的学以致用。

而python,既然是你的兴趣所在,你业余时间学学也不是不行啊。。