Go 编程语言为开发者社区所熟知已有几年,但绝对仍然令人惊叹。它成功地保持了最受欢迎的10 种语言的地位,这并非没有原因。超过 80,000 名开发者分享了他们的意见。Golang 获得了近 63% 的“喜爱”选票。我们无法想象更好的建议,但无论如何我们准备了这份概述,在我看来,是为了向您提供有关 Go 编程语言的最重要的信息。
Go 语言简史
Go 编程语言的故事始于 Google,当时三位工程师 Robert Griesemer、Rob Pike 和 Ken Thompson 对 C++ 的复杂性以及缺乏提供高效编译和执行的简单语言感到厌倦。这就是为什么在 2007 年 9 月 21 日,他们开始设计一种新语言。他们花了两年时间,在 2009 年 11 月 10 日,Go 编程语言成为公共开源项目。又过了三年,2012 年 3 月,Go 语言 1.0 版本发布。
Go 发明者的主要目标是将解释型动态类型语言的编程简便性与静态类型编译语言的效率和安全性结合起来。此外,Go语言旨在支持网络和多核计算,并加速编码过程。
为了实现这些目标,格里塞默、派克和汤普森注重简单性。这就是为什么 Go 语言的语法受到 C 家族的启发。其他输入,例如来自 Pascal,您可以在声明和包中注意到。其他灵感来自 Newsqueak 和 Limbo - 他们帮助创建了 Go 的并发方面。这使得这种编程语言融合了这些不同解决方案的最佳功能。
它叫Golang还是Go?我们回答
Go 编程语言通常称为 Golang。这是为什么?原因很简单 - 当时“go.org”域名不可用,因此程序员决定推出 golang.org(Go 和语言的混合体)。因此,官方语言名称是 Go,但官方 Twitter 标签是#golang。
什么是 Go 语言?
牢记上述所有内容,Robert Griesemer、Rob Pike 和 Ken Thompson 将 Go 打造为一种可编译、并发、垃圾收集、静态类型的语言。他们希望由精通编程的程序员为社区打造最有效的语言。
Golang 语言有何特别之处?
尽管已有 12 年的历史,Go 仍然越来越受欢迎,它是一种常用的编程语言,因为它在一个方便的包中提供了独特的优势。Go 流行的另一个原因是 Go 是一种旨在创建后端的通用语言(GPL)。在 2012 年的 Strange Loop 会议上,Andrew Gerrand 将 Go 介绍为“优雅增长的代码”。Golang 的一些优势(如下所列)证明这个引用仍然是最新的。
Go Proverbs是关于 Go 本质的有力引用列表。Rob Pike 说“ Gofmt 的风格没人喜欢,但 gofmt 却是每个人都喜欢的。” 即使,特别是在开始时,您对使用大括号等的必要性不满意,但最终您会欣赏 gofmt。只有一种标准在运行——而不是像大多数编程语言那样有多种约定。Gofmt 作为一款专用工具,在市场上非常出色,对于保持凝聚力确实有帮助。
代码简单
Go 的语法相对较小,并且大致保持不变,没有任何大的变化。更重要的是,只有一种标准代码格式(由fmt工具生成)。Go 语法缺乏变化也对开发人员有帮助。它几乎保持不变,因此代码不会过于复杂,并且无需学习新的范例或语法。这使得它变得透明、易于学习和理解。所有这一切都可以归结为 Go 创建者的一句话:兼容性的承诺。如果您使用新版本的 Go,几乎所有用旧版本编程语言编写的程序仍然可以编译和运行,不需要任何更改。这使得它非常容易维护。
适合 Go 开发人员的最佳 IDE 和编辑器
作为一个开源项目,Go 提供了对所需开发工具的轻松访问。有多种:
IDE:
JetBrains 的 GoLand 是一款跨平台 IDE,具有动态错误检测和修复建议、一步撤消重构、智能代码完成、死代码检测、文档提示和 git 集成等功能。
GoClipse - 支持 Go 编程语言的 Eclipse IDE。
LiteIDE - 这个开源和跨平台解决方案包括可配置的构建命令、代码编辑器和管理以及广泛的 Go 支持。
Zeus IDE 是一款适用于 Windows 平台的 IDE,借助用于自动完成、文档和代码导航的 gocode 以及用于自动代码格式化的 gofmt 和 goimports 等工具,使开发人员的工作更加轻松。
编辑:
VSCode - 具有广泛 Go 支持的代码编辑器,提供语言代码导航、符号搜索、括号匹配和片段等功能。
和插件:
VIM-go - 这个定期更新的 Vim 插件提供 Go 包编译、折叠和语法突出显示以及集成的 delve 支持。
比这些工具更有趣的是,Go 创建者建立了一个在线环境,您可以在其中测试用 Go 编程语言编写的产品 - Go Playground。
Go 编程语言速度很快
关于 Go 的普遍看法是它是一种快速的编程语言。这些不仅仅是空话——这个比较清楚地证明了这一点。与 Python 相比,这些数字显然有利于 Go 一方。
但如果我们谈论速度,究竟是什么让 Go 语言脱颖而出呢?答案可能是 Goroutines,它同时执行活动。Goroutine 是由 Go 运行时管理的轻量级线程。它比操作系统中的线程消耗更少的资源,并且当您比较这两种解决方案时,创建它们的成本肯定更低。
并发范式
如果一个程序支持并发范例,则意味着它可以在重叠的时间段内(看似)同时处理多个任务/操作。Go 原生支持并发范式,它允许多线程、多处理和异步。Golang 运行时调度程序有助于管理创建并需要处理器时间的所有操作(Goroutines)。通道也有帮助——这些类型化的管道同步 Goroutines 并使它们之间的通信更加高效和流畅。
这些并不是工程师愿意使用的唯一 Go 功能 - 依赖管理、运行时反射的强大功能、垃圾收集和组件也是 Golang 的显着优势。
在 CodiLime,我们在许多项目中利用了 Golang 的优势 - 例如当我们构建微服务安全平台时为我们的客户。
Golang 在实践中最适合做什么
云原生开发
由于其并发性和网络功能以及高度的可移植性,Go 对于构建云原生应用程序非常有用。云原生计算的几个支柱,例如 Docker、Kubernetes 和 Istio,实际上是使用 Go 编程语言构建的。
各种网络服务
并发是网络应用程序的命脉,Go 的原生并发特性(主要是 goroutine 和通道)非常适合此类任务。因此,很多 Go 项目对于网络、分布式任务和云服务很有用,例如 API、Web 服务器和 Web 应用程序的简单框架。
独立工具和实用程序
Go 是一种编译语言,这意味着应用程序被编译成二进制文件。这些二进制文件本身几乎没有外部依赖项,并且几乎可以在任何地方运行。由于 Go 中的程序启动速度快,并且可以轻松打包以进行重新分发,因此它们对于开发实用程序和其他工具非常有用。一个实例是访问服务器 Teleport(用于 SSH 等)。通过下载预构建的二进制文件或从源代码构建它,Teleport 可以快速、简单地安装在服务器上。
Go 的功能对许多行业都有帮助。这是事实,但并没有让任何事情变得更清楚!这就是为什么我选择了一些(在我看来)最有趣的案例研究。您可以在Go 语言网站上找到决定在其项目中依赖 Go 的公司的完整列表。
谷歌
由 Google 开发人员创建的编程语言现在支持 Google 解决方案。Chrome优化指南服务就是其中之一。这项基于 Go 的服务会为您的页面加载提供改进建议(以及实施更改的最佳时间)。另一个是 Firebase,它是 Google Cloud 客户的托管移动平台。最开始只是用Go写了一个小服务。当应用程序开发完成后,工程师决定用 Go 语言完全替换 Node.js 后端代码。
这两个只是一个示例 - Google 在其他有趣的项目中使用 Go 。
kubernetes
Kubernetes 最初是由 Google 建立的,所以我将它们放在一起。现在,它是由云原生计算基金会开发的一个单独的项目。这个用于管理容器化工作负载和服务的开源容器编排系统是由 Google 创建的。而且,您毫无疑问可以猜到,它是用 Go 语言编写的。使用这种编程语言的决定并不是家庭关系的结果,而是由于 Go 的快速工具、高质量的库和垃圾收集。
Uber
Uber 使用 AresDB——一个用 Go 编程语言编写的实时分析仪表板。它使公司能够有效地统一、简化和改进实时分析数据库解决方案。AresDB 使用 Go 开发,允许 Uber 放弃第三方数据库解决方案并在内部保留深入分析。
Docker
Docker, Inc. 产品(也称为 Docker)是一种 PaaS(平台即服务),可以在容器中交付软件。正如您可能猜到的,Docker 是用 Go 构建的。工程师的选择是基于 Go 在 Linux 中工作的能力(作为选定的初始操作系统),以及将 Docker 的功能合并到其环境中的用户友好路径。本文解释了为什么“Docker 找不到比 Go 更好的合作伙伴”。
PayPal
这家公认的跨国金融技术公司支持在线汇款,是支票和汇票等传统纸质方法的替代方案。他们的支付处理平台是用 C++ 开发的,但代码的复杂性减慢了平台现代化流程的速度。Go 被选为简化和开发平台的解决方案。
Dropbox
Dropbox 是一种用于存储和共享文件以及项目协作的托管服务。随着基础设施的发展,Dropbox 团队开始寻找更有效地扩展系统的解决方案。这就是为什么他们将关键的性能关键后端从 Python 转移到 Go,因为它具有更好的并发支持和执行速度。但还有更多 - Dropbox 的一些使用 Go 编程语言构建的库是开源的 - 示例可以在他们的网站上找到。这些用例展示了 Go 在特定环境中的表现。
什么时候 Golang 不是您项目的最佳选择?
Go 的缺点
没有一种解决方案适合所有用户和案例。这同样适用于 Go 语言。有何障碍?
有限的泛型支持——很长一段时间,Go 没有泛型。最后,在 Go 1.18 中,引入了泛型类型和函数。然而,泛型并没有得到完全支持。例如,具有通用参数的方法未实现。
较小的默认库 - 您可能会注意到缺少函数,例如字符串和数字。
在某些情况下,Go 可能太简单 - 您可能会错过诸如 map 或 reduce 之类的函数 - Go 编程语言不提供它们。
就像其他所有编程语言一样,Go 也有其弱点。在我看来,了解它们至关重要,这样您才能选择最能满足您需求的解决方案。
何时押注 Golang 语言
每种编程语言都有权衡,Golang 也不例外。例如,Python 中的脚本可以编写得更快,因为没有强制的编码风格和更多的语法糖,而 Go 可能需要更多的努力来生成代码,因为它具有更明确的语法。
毫无疑问,Go 是一门有前途的语言,但它有特定的用途。它主要用于API/RPC服务和编写CLI。人们对在不同领域使用 Go有着浓厚的兴趣,但一些开发人员在这些领域工作时面临着特定的障碍。Golang 主要是由 Google 开发的,旨在解决硬件资源受限的软件可扩展性问题。Go 对于解决处理时间瓶颈问题也很有用。
用户群不断扩大的后期公司的后端经常难以跟上活动量。由于 Golang 支持并发功能并具有最小的内存占用,因此它非常适合服务器必须处理高需求的后端应用程序。
Golang 是一种编程语言,Dropbox 使用它来有效管理其超过 5 亿客户的网络。该语言也非常适合开发每月接待数百万访问者的电子商务网站。资源密集型服务 Docker、Terraform 和 Kubernetes 均由 Golang 提供支持。
Go 背后有一个强大的社区 - 在GitHub上,您可以找到一系列有用的信息:有关如何开始和使用 Go 语言的有用链接、其他知识来源、Slack 频道、Go 会议的日期,但这还不是全部。还有许多书籍和播客值得您关注。当新版本发布时,即使是 Go 创建者仍然会自己撰写新的博客文章 - 开发人员可以提供他们的想法并做出贡献。总之,这一切都增强了社区和语言本身的能力。
Go 语言的局限性
选择编程语言时,在做出决定之前了解其局限性非常重要。它将节省您的时间和金钱。
iOS应用程序开发
这是有争议的,但许多人声称 Golang 可能为构建 iOS 应用程序设置了限制。如果您访问此类故障排除论坛,您会发现开发人员在回答有关基于 Golang 的 iOS 应用程序开发的问题时遇到问题。
此外,对于只想在 Android 和 iOS 项目中使用一种语言的开发人员来说,Go 并不是一个完美的解决方案。因此,Go的发展有一定的局限性,并不总是一帆风顺。随着 Golang 的发展,应该预计 iOS 开发工具也会得到改进。
不可调节
那些支持动态类型语言的人认为这种静态类型语言的编码灵活性较低。当然,这是此类编程语言的本质,但在为您的产品选择最合适的选项时值得了解。
Go的未来发展
未来的 Go 开发将越来越关注其开发者社区的偏好和要求,Go 的维护者会修改语言以更好地服务于这些受众,而不是树立严格的先例。泛型就是一个典型的例子,在关于如何进行的激烈争论之后,泛型最终被纳入到语言中。
2021 年 Go 开发者调查表明,虽然 Go 用户普遍对该语言的功能感到满意,但仍有很大的发展空间。依赖管理、Go 中的一个长期问题、错误诊断和可靠性是用户请求更改的首要领域,而内存利用率、CPU 使用率、二进制大小和构建时间等问题受到的关注要少得多。
Go 的速度和开发简易性尚未在其他情况下得到充分利用,其在企业开发中的利用仍是未知数。然而,Go 作为一种重要的编程语言的未来已经确定,尤其是在云中,它的速度和易用性使得构建可长期保持的可扩展基础设施变得更加容易。
结论
Go 编程语言仍然不如 Python 流行,但它已经在开发者世界中崭露头角。其简约的语法、创新的 Goroutines 而不是典型的线程以及广泛的工具甚至让美国运通、Cloudflare、Facebook、微软和 Netflix 等大公司都信服。该列表显示了世界各地有多少家公司正在使用 Go 编程语言。它的长度令人印象深刻,而且还在不断增长。如果您想知道是否给 Go 一个机会,也许这个建议会告诉您。在我看来,没有比社区更好、更有力的见证了。
“优雅地增长的代码”也会随着支持性社区和强大的可用工具而增长。这使得 Go 编程语言成为一个有竞争力且值得关注的选择。
-
Go
+关注
关注
0文章
43浏览量
12235 -
编程语言
+关注
关注
10文章
1928浏览量
34536 -
编辑器
+关注
关注
1文章
800浏览量
31037
原文标题:Go 编程语言 - 你应该知道的一切
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论