当前位置:首页>java>10 年 Java 经验,转行 Go 的 7 个理由

10 年 Java 经验,转行 Go 的 7 个理由

  • 2026-09-10 12:34:30
10 年 Java 经验,转行 Go 的 7 个理由
本文作者是一位工作了 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 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程序员所需要掌握的核心知识。

01

Go面试题合集

今天分享的这份面试题都是面试中常见的题型,有基础的面试题,也有k8s、docker、devops的面试题,每个题目都有专门的解析,最近有准备面试的朋友可以看一下。

02

Go学习路线图

一份好的学习路线图,可以让我们的学习事半功倍,今天给大家分享几个学习路线图,帮助大家快速梳理主次知识点,以最快的方式掌握Go语言。

 

 

上下滚动查看更多

03

Go学习文档笔记

这份学习笔记基本上包含了Go的各个知识点,有web开发框架(beego、Echo、gin、Iris)、数据库(MongoDB、mysql、Redis)、微服务容器云(ceph、Docker、ENVOY、Istio、Kubernetes)、监控系统(Prometheus、Zabbix、Nagios、Grafana)、Docker、Nginx、Git、数据结构等等,是一个非常全面的学习资料。

04

Go入门视频

虽然Go是一门新的语言,但它语法稳定,简单的同时又易于阅读和理解,使它成为开发微服务应用的绝佳选择。想学GO的这部分资料肯定能帮到你。

05

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学习大礼包)

最新文章

随机文章