原因一:开发速度
如今,当我要编写一款软件时(我肯定可以用上面提到的三种语言编写它),我将始终选择 Go。
因为我可以花较短时间用 Go 开发完,而且代码更具可读性,不那么抽象,更“切合实际”。
在编写 Go 代码时,您所做的正是您应该做的。编写的代码基本就是“生产级别”代码。你不是在编写类,子类,getter,setter 和一堆代码,实际上这些都没做。当你编写 Go 代码时,你在编写代码,这可以完成某些工作。您不是在为“代码本身”编写代码。(GCTT 译注:意思是说,写的代码都是完成任务核心的代码,而不是一堆无关的代码,比如 getter/setter 之类的就是和完成任务不相关的代码)。
最终,你将减少编写代码的时间,并减少对代码工作的思考,因此开发的速度将蒸蒸日上。
旁注:从我的个人经验来看,用 Go 编写的代码从这三种语言中读起来最简单。我已经对此进行了测试。我曾经用他们最好的技术用 C#,Java 和 Go 编写过一个软件。然后,我问了三个同事一个简单的问题:“这段代码在做什么?”。它们在 Java 和 C#(现在是 PHP 开发人员)中迷失了,但是他们从 Go 代码中看懂了。
原因二:部署速度
这是我个人最喜欢 Go 的第二点。我倾向于实时修改。我希望修改后能立即看到修改的结果。
Go 代码的构建速度如此之快,我可以根据需要进行多次更改,这没有问题。而且我不在乎项目有多大。
想为三个主流操作系统(Win、Linux、Mac)部署二进制文件吗?小菜一碟。
原因三:只有一种方式
在数月或数年后看之前的代码,你将不胜感激。根据创建者的决定,Go 代码采用相同的格式设置。这意味着你将几乎理解任何 Go 代码。
例如,作为 C#开发人员,你大约有 7 种不同的方式将整数转换为字符串。你可以通过更多选择来做很多其他事情。
你是否可以想象,如果将所有这些“不同的处理方式”结合起来,例如将整数转换为字符串,那么你将拥有多少种不同的代码?我在理解其他开发人员的 Java 和 C# 代码时仍然遇到问题,但是即使当时我还不知道的 Go 代码在做什么,却可以立很容易看懂。
Go 的简单性是它的优势之一,随着时间的流逝,您一定会喜欢这点。
原因四:二进制大小
作为开发人员,你应该始终尝试拥有尽可能小的二进制文件。较小的尺寸意味着更快的部署。较小的尺寸意味着较少的网络传输。越小越好。
在我们公司中,我们将 Docker 用作运行时环境,因此我们将软件“打包”到 Docker 映像中。Docker Hub 存储库中有大量映像,因此我们可以轻松比较它们的大小。当然,无论使用哪种语言,我们都会使用最佳技术来使镜像尽可能小。
我们不在 Docker 中使用 Java,因此抱歉,在这里无法进行比较。
但是我们使用 C# 和 Go,所以比较相同的功能。
C# 镜像 40+ MB[1]Go 镜像 3+ MB[2]
你可以在本文[3]中了解更多信息。
原因五:标准库
当我们开始使用 Go 时,我们开始搜索库。因为你需要库来执行其他操作,对吗?
在 Go 中,它具有令人难以置信的标准库:stdlib。你仅使用标准库就可以编写几乎所有内容。更少的库(这里是模块)意味着您需要寻找的第三方代码也更少。我在这篇文章[4]中写了这个。
原因六:Goroutine
这是我们所有人的最爱。我们正在开发基于网络的软件。与该设备的通信,与该设备的通信,与…的通信,你明白了吧。我们希望在所有这些设备之间进行区分。
这意味着,线程是我们在软件中经常使用的东西。如果你曾经使用过线程,也许你会记得,你是如何学习的以及必须要做的工作。(GCTT 译注:比如 Java 怎么开线程,你知道吗?)
在 Go 中,如果要在“线程”中运行 function(),只需在其前面添加 go,即像 go function() 这样。
就这样。当我第一次看到它的时候,我就像:“就这样吗?”。是的,仅此而已。
另外,您是否知道,默认情况下,一个 Java 线程分配大约 1MB 的内存,C# 线程也分配大约 1MB 的内存,但是 Go 的 goroutine 仅分配大约 2kb 的内存?那有多棒?!
原因七:Web Server
这是一瞬间的爱,特别是对我来说。你可以使用下面的代码运行一个简单的 Web 服务器,侦听 80 端口。
然后将你的 html,css 和 javascript 文件放入 data 文件夹中,就可以了。
package mainimport ("github.com/julienschmidt/httprouter""net/http")funcmain() { router := httprouter.New() router.ServeFiles("/data", http.Dir("data")) _ = http.ListenAndServe(":80", router)}
如果你想看完整的教程,这篇文章[5]适合你。
注:我主张使用标准库,在这里,在此 Web 服务器示例中,我实际上是在使用第三方库。
原因很简单:我一直都在使用它,但我错误地将其视为标准。下面是没有第三方库,实现相同功能。
package mainimport ("net/http")funcmain() { http.Handle("/", http.FileServer(http.Dir("./data"))) _ = http.ListenAndServe(":80", nil)}
总结
当我第一次了解 Go 时,我并不感兴趣。我以为,我使用的已经是世界上最好的语言了(即 Java 和 C#),并得到了大公司的支持。(GCTT 译注:世界上最好的语言不是 PHP 吗?哈哈哈哈)
但是后来我读了一些有关 goroutine 的东西。它吸引了我的注意。当我看到运行 Web 服务器有多么容易时,我就迷上了。我开始使用 Go,从此无法回头。Go 成为我最爱、最常用的语言。
所以,我建议您尝试一下。
你会惊讶于你的生产力。
来源:作者Petr Jahoda,原文链接https://itnext.io/7-reasons-you-should-try-use-go-5fb4714015d1
参考资料
[1]C# 镜像 40+ MB: https://hub.docker.com/r/petrjahoda/zapsiservercore/tags?page=1&ordering=last_updated
[2]Go 镜像 3+ MB: https://hub.docker.com/r/petrjahoda/zapsi_service/tags
[3]本文: https://itnext.io/create-go-service-the-easy-way-viii-157427e7cd35
[4]这篇文章: https://petrjahoda.medium.com/lessons-learned-while-developing-enterprise-system-287c3afce1ca
[5]这篇文章: https://medium.com/swlh/create-go-service-the-easy-way-iii-c84489cc1ee0
现在已经步入2026年了,不少小伙伴在考虑入行学习go语言。
为了帮助大家早日习得go语言核心知识快速入行,准备了一份详尽的go学习大礼包,【超全Go面试题合集+Go学习路线图+Go学习文档笔记+Go项目实战视频+Go入门视频】一份涵盖大部分Go程序员所需要掌握的核心知识。今天分享的这份面试题都是面试中常见的题型,有基础的面试题,也有k8s、docker、devops的面试题,每个题目都有专门的解析,最近有准备面试的朋友可以看一下。
一份好的学习路线图,可以让我们的学习事半功倍,今天给大家分享几个学习路线图,帮助大家快速梳理主次知识点,以最快的方式掌握Go语言。
这份学习笔记基本上包含了Go的各个知识点,有web开发框架(beego、Echo、gin、Iris)、数据库(MongoDB、mysql、Redis)、微服务容器云(ceph、Docker、ENVOY、Istio、Kubernetes)、监控系统(Prometheus、Zabbix、Nagios、Grafana)、Docker、Nginx、Git、数据结构等等,是一个非常全面的学习资料。
虽然Go是一门新的语言,但它语法稳定,简单的同时又易于阅读和理解,使它成为开发微服务应用的绝佳选择。想学GO的这部分资料肯定能帮到你。
Go语言-实时分布式消息平台NSQ使用与原理解析
Go语言开发企业级DevOps平台
全方位拆解GO运维&开发工程师前景
go面向接口编程
Golang协程!让服务端的研发飞舞
探索骄傲的go语言
揭秘Go云原生核心用法及高并发精髓
教你徒手使用Golang打造信息硬件采集工具
揭秘Go语言微服务架构与实践
企业自动化部署及Syncd系统剖析
Go运维开发-运维资产与实战多云管理平台
Go运维开发-AIOPS与运维日志可视化
Go运维开发-泛运维监控
60分钟掌握beego和websocket
60分钟掌握爬虫和可视化分析
60分钟掌握go协程&管道&socket通信
60分钟掌握Go基础及加解密知识
60分钟掌握日志分析和可视化
Go-企业自动化部署及Syncd系统剖析
实时分布式消息平台NSQ使用与原理解析
本次资料由互联网用户贡献,供需要的用户领取作私下学习、交流用途。公众号大部分学习资源已获得版权授权,小部分由网络整理无法联系到原作者,如有侵权联系删除。【资料免费领取方式】
长按识别下方二维码
备注:(go学习大礼包)