前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开篇:为什么学习 Go 语言

开篇:为什么学习 Go 语言

作者头像
学院君
发布2023-03-03 13:31:04
3140
发布2023-03-03 13:31:04
举报
文章被收录于专栏:学院君的专栏学院君的专栏

本系列教程是之前发布的 Go 入门教程的升级版,采用最新版的 Go 语言语法和最佳实践进行优化,并且会对部分章节内容进行增补和调整,比如泛型与反射、并发编程和 Web 编程等。

简介

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 语言学习路线图如下:

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

以及基础知识图谱:

还有一个完整的 roadmap:

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

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

本系列教程首发在 geekr.dev。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客书房 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 与其他语言的对比
    • C/C++
      • Java
        • Python/PHP
          • JavaScript
          • 学习路线图
          相关产品与服务
          灰盒安全测试
          腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档