分享

简述字节跳动选择Go语言的原因

levycui 2022-12-6 22:26:09 发表于 实践型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 2808
问题导读:
1、GO语言实时修改如何理解?
2、GO语言二进制文件有什么优势?
3、GO标准库有什么优势?
4、Web Server如何使用?



原因一:开发速度如今,当我要编写一款软件时(我肯定可以用上面提到的三种语言编写它),我将始终选择 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 文件夹中,就可以了。

  1. package main
  2. import (
  3. "github.com/julienschmidt
  4. /httprouter"
  5. "net/http"
  6. )
  7. func main() {
  8. router := httprouter.New()
  9. router.ServeFiles("/data", http.Dir("data"))
  10. _ = http.ListenAndServe(":80", router)
  11. }
复制代码

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

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

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

  1. package main
  2. import (
  3. "net/http"
  4. )
  5. func main() {
  6. http.Handle("/", http.FileServer(http.Dir("./data")))
  7. _ = http.ListenAndServe(":80", nil)
  8. }
复制代码

总结


当我第一次了解 Go 时,我并不感兴趣。我以为,我使用的已经是世界上最好的语言了(即 Java 和 C#),并得到了大公司的支持。(GCTT 译注:世界上最好的语言不是 PHP 吗?哈哈哈哈)

但是后来我读了一些有关 goroutine

的东西。它吸引了我的注意。当我看到运行 Web 服务器有多么容易时,我就迷上了。我开始使用 Go,从此无法回头。Go 成为我最爱、最常用的语言。

所以,我建议您尝试一下。
你会惊讶于你的生产力。


作者:知乎
来源:https://www.zhihu.com/question/353085825

最新经典文章,欢迎关注公众号


没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条