为什么 Golang 正在接管软件行业

简介: 为什么 Golang 正在接管软件行业

今年早些时候,Stack Overflow 发布了 2021 年的开发者调查。如果你关注当时的技术头条,你会发现 JavaScript 和 Python 连续一年占据主导地位。然而,那些不是我关注的语言。

该列表中还有另一种语言引起了我的注意:Golang。

“Golang?但它只排在第12位?你可能在想。

没错,它不是世界上最流行的编程语言。使用它的开发人员数量相对较少,这是有充分理由的。

Go 相对较新且不成熟。它是一种基本语言,缺少其他语言所具有的许多语法糖。直到三年前,它还没有标准化的包管理器。

更多的开发人员没有使用它也就不足为奇了……然而。

你看,虽然 Go 在流行度方面仅排名第 12,但它在开发人员想要学习的语言方面排名第三(我将 TypeScript 算作 JavaScript 类别)。

HackerRank 也支持这一点。根据他们 2020 年的研究,Golang 已经连续三年成为最想学习的语言。

不仅如此,Go 还在最受欢迎的语言中排名前十,并且是GitHub 上star数量排名第三的流行语言

正如我之前提到的,Go 仍然有很多问题。在当前的编程语言环境中,有更多通用和强大的选项可供选择。那么为什么 Go 会慢慢接管软件行业呢?



一、简约之美


尽管 Go 有缺陷,但还是有很多值得喜欢的地方。从它的并发模型、丰富的第三方支持、其命令行工具的健壮性等等。但如果不是 Go 的最佳特性:易用性,所有这些都将是徒劳的。

正如我之前提到的,Go 是一种简单的语言。但它的设计就是这样——它的简单就是它的力量。它只有 25 个关键字,但每个关键字都是通用的。

for为例。它是为循环和迭代保留的关键字。

它可以用作普通的 for 循环。

for i:= 0; i < 10; i++ { 
  fmt.Println(i) 
}

它可以用作while循环。

i := 0 
for i < 10 { 
  fmt.Println(i) 
  i++ 
}


它可用于迭代数组或映射。

for key, value := range myMap { 
  fmt.Println(key, value) 
}

不要让 Go 的简单性欺骗了你——它很有冲击力。

二、具有动态特性的静态语言

Go 是一种静态语言,传统上学习起来更令人生畏。特别是对于那些学习使用 Python 或 JavaScript 等动态语言进行编程的人。

但是 Go 已经从其充满活力的兄弟那里学到了东西。它支持(有限的)动态分配,并且是一种带有垃圾收集器的内存管理语言。将其与简单的语法结合起来,就可以形成一种易于掌握和开始构建的语言。

平滑的学习曲线是其快速采用的最大驱动因素之一。

三、跟着钱走

如果你想知道开发人员涌向 Go 的另一个原因,你需要做的就是跟着钱走。

根据 HackerRank 的研究,与平均水平相比,Golang与工资增长 33% 相关。不仅如此,十分之一的招聘经理希望应聘者具有 Go 经验。开发人员有学习它的经济动机。

需要指出的一件事有相关性并不意味着因果关系。仅仅因为你知道Golang并不一定意味着你会赚更多的钱。但让我们研究一下为什么存在这种相关性。

四、大型科技公司喜欢它

最初由 Google 开发并于 2009 年发布,Golang 缓慢但肯定地赢得了软件行业的信任。随着微服务架构的兴起,越来越多的大型科技公司采用了它。

像 Uber、Twitch 和 Slack 这样的公司都在他们的堆栈中使用 Go。甚至以采用和宣传单体架构而闻名的公司也采用了它,例如 GitHub 和 Shopify。

所有这些公司都支付最高市场价格并吸引了成千上万有抱负的软件工程师。过去,想要在这些科技巨头工作的开发人员需要学习 Java、C 或 C++ 等语言。但老实说,这些并不是大多数开发人员愿意每天使用的语言。您只需要查看开发人员调查即可亲自了解这一点。

大多数开发人员害怕使用 C、C++ 和 Java — 来源:StackOverflow 调查

Go 为想要为大型科技公司工作且不想让自己受制于 Java 的工程师提供了另一种选择。

但这仍然留下了一个悬而未决的问题:为什么越来越多的公司转向 Go?

答案很简单。

五、Go是云的语言

说云计算已经改变了科技行业是轻描淡写的。公司不再需要建立服务器群并雇佣团队来维护它们。云提供商已经将服务器变成了一种商品。工程团队现在可以通过单击按钮启动虚拟机。

云计算的兴起导致了对可帮助团队在云上管理和扩展其架构的技术的需求。于是云原生诞生了。

Terraform、Docker 和 Kubernetes 等技术使使用微服务在云上部署、扩展和管理应用程序变得前所未有的简单。它们是Git 背后最受欢迎的开发工具。它们都是用 Go 构建的。

不仅仅是 Docker 和 Kubernetes。云原生计算基金会赞助的绝大多数项目都是用 Go 编写的。

Go 是为云和微服务而构建的。它是为多核服务器设计的。它可以轻松地交叉编译到各种体系结构和操作系统。它也非常轻巧。它编译的二进制文件比 Java 中的类似二进制文件小 10 倍。它们不仅更小,而且编译速度也更快。

Kubernetes 拥有超过 500 万行应用程序代码。如果用任何其他语言编写,编译可能需要几十分钟到几小时。使用 Go,只需一两分钟。

我不是唯一一个这么说的人。根据谷歌云原生架构的 5 条原则

“几乎所有的云架构都基于微服务架构”

随着十分之六的组织已经将他们的工作负载转移到云中,而且越来越多的公司越来越依赖 Go——无论他们是否直接使用它。


六、总结

Go 不太可能比 JavaScript、Python 或 Java 更流行和使用。但它没有必要。编程语言不是赢家通吃的市场。

Go 解决了一个关键的需求。一种提供静态语言的速度、安全性和可扩展性以及动态语言的易用性的语言。它还开辟了一个重要的利基市场。

每种语言都有其利基。JavaScript 有 Web 开发。Python 有数据科学。Ruby 有初创公司。Java 有企业级。Go 有云。

尽管只有十年的历史,但 Golang 已经取得了成功。随着云计算的主导地位的蔓延,Go 的未来看起来比以往任何时候都更加光明。


文丨Soundhearer

图丨来源于网络




相关文章
|
5月前
|
Go
第十二章 Golang家庭收支记账软件项目
第十二章 Golang家庭收支记账软件项目
82 2
|
11月前
|
传感器 数据采集 物联网
Golang硬件控制:将软件力量扩展到物理世界
Golang硬件控制:将软件力量扩展到物理世界
|
1月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
87 4
Golang语言之管道channel快速入门篇
|
1月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
56 4
Golang语言文件操作快速入门篇
|
1月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
76 3
Golang语言之gRPC程序设计示例
|
1月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
69 4
|
1月前
|
Go
Golang语言错误处理机制
这篇文章是关于Golang语言错误处理机制的教程,介绍了使用defer结合recover捕获错误、基于errors.New自定义错误以及使用panic抛出自定义错误的方法。
43 3
|
7天前
|
前端开发 中间件 Go
实践Golang语言N层应用架构
【10月更文挑战第2天】本文介绍了如何在Go语言中使用Gin框架实现N层体系结构,借鉴了J2EE平台的多层分布式应用程序模型。文章首先概述了N层体系结构的基本概念,接着详细列出了Go语言中对应的构件名称,包括前端框架(如Vue.js、React)、Gin的处理函数和中间件、依赖注入和配置管理、会话管理和ORM库(如gorm或ent)。最后,提供了具体的代码示例,展示了如何实现HTTP请求处理、会话管理和数据库操作。
21 0
|
1月前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
41 4
Golang语言goroutine协程篇
|
1月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
35 3
Golang语言之Prometheus的日志模块使用案例