开篇:Go 语言的优势与学习路线图

由 学院君 创建于1年前, 最后更新于 4个月前

版本号 #5

简介

Go 语言又称 Golang,由 Google 公司于 2009 年发布,近几年伴随着云计算、微服务、分布式的发展而迅速崛起,跻身主流编程语言之列,和 Java 类似,它是一门静态的、强类型的、编译型编程语言,为并发而生,所以天生适用于并发编程(网络编程)。

目前 Go 语言支持 Windows、Linux 等多个平台,也可以直接在 Android 和 iOS 等移动端执行,从业务角度来看,Go 语言在云计算、微服务、大数据、区块链、物联网、人工智能等领域都有广泛的应用。所以当下学习正当时。

与其他语言的对比

C/C++

Go 设计的初衷是替代 C,所以二者有很多相似之处,但 Go 做的更多:

提供了自动管理线程和垃圾回收的运行时,在 C/C++ 中,需要自行管理线程和内存

更快的编译速度

因此,相对 C/C++,Go 开发效率更高。

适用场景不同:

C/C++ 可用于高性能嵌入式系统、大型云应用以及桌面程序开发

Go 适用于系统和云平台开发

Go 不适用于高性能嵌入式系统,因为嵌入式系统资源有限,而 Go 运行时调度线程和垃圾回收需要额外的开销。至今没有提供 GUI SDK,所以也不适用于桌面程序开发。

Java

Java 程序编译之后需要安装额外的 Java runtime 运行,Java 程序的可移植性依赖 Java runtime,Go 不需要,Go 运行时已经包含在这个编译的二进制文件中了,这体现在部署上的区别就是需要在服务器安装 Java runtime,而 Go 只需要部署单文件即可。

另外就是程序具体执行的时候,Go 被编译成二进制文件被所在操作系统执行,而 Java 通常是在包含了 JIT 编译器的 JVM 中执行,JIT 会对代码进行优化。

Python/PHP

Python/PHP 都是动态语言,而 Go 是静态语言,会做类型检查,可靠性更高。

开发 Web 应用时,Python/PHP 通常躲在 Nginx/Apache 后面作为后台进程,Go 则提供了内置的 Web 服务器,完全可以直接在生产环境使用。

Python/PHP 之所以要借助额外的 Web 服务器是因为对并发请求的处理,Python 有一个全局锁同时只允许运行一个线程,PHP 本身就没有多线程多进程机制,一次请求从头到位都是一个独立的进程,为了让基于 Python/PHP 的 Web 应用支持并发请求,必须借助外部 Web 服务器。

而 Go 内置的 Web 服务器充分利用了 goroutine,对并发连接有很好的支持。此外,由于协程的本质是在在同一个进程中调度不同线程,所以还支持共享资源。

另外就是 Python/PHP 作为动态语言,性能不如 Go,如果要提升 Python/PHP 性能,必须通过 C 语言编写扩展,复杂度和学习成本太高。

JavaScript

这里的 JavaScript,主要是 Node.js。

JavaScript 是单线程模型,尽管异步 IO 机制可以使用不同的线程,主程序还是以单线程模式运行的,主程序代码耗时会阻塞其他代码的执行。

而 Go 语言的多线程模型可以通过运行时管理调度协程在多个处理器的不同线程中运行,可以充分利用系统硬件。

Node.js 使用 Google Chrome 的 V8 引擎,其中包含了带有 JIT 编译器的虚拟机,可以对 JavaScript 代码进行优化来提升性能,而 Go 代码直接被编译成机器码执行,没有类似的东西,也无此必要。

注:以上对比内容整理自《Go In Practice》这本书。

学习路线图

附 Go 语言学习路线图如下:

注:这里面列到的书很多,挑感兴趣的看看就好了,真要把这些书都看下来,没个三五年都出不来。

以及基础知识图谱:

还有一个完整的 roadmap:

当然,在学习过程中,官方文档 也是不可或缺的伴手工具。

接下来学院君将从基础知识切入,帮助大家快速入门 Go 语言开发,然后结合程序员内功修炼系列微服务架构篇进行实战开发演示,以便大家能完全掌握这门语言。

另外,本系列教程会同步更新到学院君的微信公众号,欢迎扫码关注以便第一时间看到最新教程:

在学习过程中有什么问题,还可以通过加入「Go 语言研习社」与大家一起讨论:

go语言学习路线图_开篇:Go 语言的优势与学习路线图相关推荐

  1. 小甲鱼c语言课后作业_知识,就是力量——山财“学习小课堂”助你蓄力

    编者按 少年,你渴望 知识的力量 吗? 我们有山财最全的学习秘籍, 只待你的耐心翻阅与潜心修炼! 接下来,就让我们一起查收学习干货~ 内容摘要 本系列推送分为 [悦览篇][干货篇][招募篇] 三大模块 ...

  2. JAVA语言教学重点_《JAVA语言》教学大纲

    <语言>教学大纲 课程代码: 课程总学分实验学分: 课程总学时数实验学时数: 一.课程目标 课程目的是培养学生对面向对象编程技术的理解和掌握,加强对学生"计算机编程思维" ...

  3. c语言有趣代码_为什么C语言永远不会过时?

    直至今天还有人在喊着C语言都过时的语言了,还有什么值得去学的,看现在的python,php等语言现在用起来多简单,谁还去学习老掉牙的C语言,事实真的是这样的吗?笔者作为专门下载了这两种语言的底层源码. ...

  4. C语言初阶_初识C语言(1)

    凡是过往,皆为序章 期末考试结束了,真是感慨良多啊...... C语言编程题大家都做对了多少呢? 不管怎么样,都已经过去了.不管你学得怎么样,都可以在接下来的时间里,我们一起重新回顾一遍C语言初阶的知 ...

  5. python学习图解_大牛整理!Python学习方法和学习路线,看完茅塞顿开!

    原标题:大牛整理!Python学习方法和学习路线,看完茅塞顿开! Python 是一种极具可读性和通用性的编程语言.Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团 ...

  6. java语言就业方向_四大就业方向彻底解决你学习Java语言编程的后顾之忧-生活感悟与随笔 -亦是美网络...

    前面的文章中已经给大家介绍了关于Java编程语言的优势.特点以及就业前景等内容,大家之所以这么热衷于Java编程学习,不仅是因为Java是编程市场上最为广泛流行的语言,大家更关心的是学习了Java编程 ...

  7. C语言学习趣事_你不知道的C语言应用

    一.引 我一直不明白"文人相轻"是什么意思,也许就是说:文人清客之间互相瞧不起的事情吧.但对于我来说,文人相轻就是表示:无知者无畏. 无论你的某一方面的语言学的怎么样,怎么样的牛逼 ...

  8. go语言mysql操作_使用Go语言操作MySQL数据库的思路与步骤

    最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...

  9. r语言svr模型_使用R语言建立一个决策树回归模型

    决策树是一种简单但使用广泛的分类算法,根据目标变量的类型,决策树分为分类决策树(目标变量为因子型)与回归决策树(目标变量为连续数值型).在这里,我们使用R建议一个回归决策树模型. 决策树简单介绍 对于 ...

最新文章

  1. mysql建索引java_MySQL 索引
  2. 简单介绍C语言使用四种方法初始化结构体
  3. Chapter11-RMAN Backups
  4. asp利用dictionary创建二维数组
  5. 第9章例题 7-2 学生成绩排序
  6. 十年硬件老司机,结合实际案例,带你探索单片机低功耗设计!
  7. 小技巧,怎么让MFC的MDI程序子窗口看起来有扁平的效果
  8. 【原创】Java实现手机号码归属地查询
  9. [译]直观理解信息论
  10. 996工作制,你能扛多久?
  11. 客流量统计分析系统应用解决方案
  12. 使用Layui搭建后台管理界面
  13. c语言文件压缩与解压缩实验报告,哈弗曼树文件压缩与解压实验报告(C语言).doc...
  14. linux的dve界面如何debug,VCS课时3:使用DVE进行Debug
  15. VS Code设置PHP可执行文件
  16. 关于直播的技术细节都在这里
  17. 力扣刷题全局变量WA,局部变量AC的问题
  18. golang 获取一天前,一个月前,一年前的日期
  19. 74系列 LS 与 HC 区别
  20. 基于JavaWeb的影视评论网站设计与实现 毕业论文+项目源码及数据库文件

热门文章

  1. Hexo瞎折腾系列(6) - 将博客同时部署到Github和Coding
  2. Python-初体验
  3. iOS pdf矢量图代替多倍图
  4. SQL Server 内存中OLTP内部机制概述(二)
  5. CentOS下SNMP的安装与使用
  6. 源码安装redis-3.2.11
  7. ELK下一个配置文件收集多个日志-if根据type类型判断
  8. zabbix监控Linux系统服务
  9. 【MySQL】RPM包安装
  10. 【PostgreSQL-9.6.3】LOG: unrecognized configuration parameter dynamic_shared_memory_type