10 年 Java 经验者:你应该尝试 Go 的 7 个理由

Go语言精选

共 3390字,需浏览 7分钟

 ·

2021-02-09 06:36

点击上方蓝色“Go语言中文网”关注,每天一起学 Go

本文作者是一位工作了 20+ 年的工程师,其中 10+ 年使用 Java,7+ 年使用 C#,最近 3+ 年使用 Go。文章的观点是作者的个人总结,提倡你尝试并使用 Go 语言。目前作者已经不使用 Java 和 C# 了。

原因一:开发速度

如今,当我要编写一款软件时(我肯定可以用上面提到的三种语言编写它),我将始终选择 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 main

import (
 "github.com/julienschmidt/httprouter"
 "net/http"
)

func main() {
 router := httprouter.New()
 router.ServeFiles("/data", http.Dir("data"))
 _ = http.ListenAndServe(":80", router)
}

如果你想看完整的教程,这篇文章[5]适合你。

注:我主张使用标准库,在这里,在此 Web 服务器示例中,我实际上是在使用第三方库。

原因很简单:我一直都在使用它,但我错误地将其视为标准。下面是没有第三方库,实现相同功能。

package main

import (
 "net/http"
)

func main() {
 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



推荐阅读


福利

我为大家整理了一份从入门到进阶的Go学习资料礼包,包含学习建议:入门看什么,进阶看什么。关注公众号 「polarisxu」,回复 ebook 获取;还可以回复「进群」,和数万 Gopher 交流学习。
浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报