page contents

golang真正有什么用处?本文就来告诉你

在过去的九年里,谷歌的Go语言 (又名Golang) (截至2019年9月发行的版本为1.13)已经从对alpha怪胎的好奇心演变为成为世界上一些最重要的语言背后经过考验的编程语言以云为中心的项目。 为...

attachments-2021-05-Lgn054RB60a47b7b27608.png

在过去的九年里,谷歌的Go语言 (又名Golang (截至2019年9月发行的版本为1.13)已经从对alpha怪胎的好奇心演变为成为世界上一些最重要的语言背后经过考验的编程语言以云为中心的项目。

为什么DockerKubernetes等项目的开发人员选择了Go? Go的定义特征是什么?它与其他编程语言有何区别?它最适合构建哪种项目? 在本文中,我们将探讨Go的功能集,最佳用例,语言的遗漏和局限性,以及Go可能从何而来。

Go语言小而简单

Go(通常称为Golang)是由Google员工(主要是长期的Unix专家和Google杰出的工程师Rob Pike)开发的,但严格意义上讲并不是“ Google项目”。 相反,Go是作为社区主导的开源项目开发的,由领导层牵头,领导层对应如何使用Go以及语言应遵循的方向持强烈看法。

Go的意思是易于学习,易于使用并且易于其他开发人员阅读。 Go没有太大的功能集,尤其是与C ++之类的语言相比时。 Go的语法让人联想到C,这使长期的C开发人员相对容易学习。 也就是说,Go的许多功能,尤其是其并发性和函数编程功能,都回溯到Erlang等语言。

作为一种用于构建和维护各种跨平台企业应用程序的类C语言, Go与Java有很多共同点 。 作为使快速开发可以在任何地方运行的代码的一种方法,您可以在Go和Python之间画出一个相似的地方,尽管差异远大于相似之处。

语言适合所有人

Go文档将Go描述为“一种感觉像动态类型的解释型语言的快速,静态类型的编译语言”。 甚至大型的Go程序也将在几秒钟内完成编译。 另外,Go避免了C风格包含文件和库的大量开销。

Go通过多种方式使开发人员的工作变得轻松:

  • 方便。 Go在满足许多常见编程需求方面已与Python等脚本语言进行了比较。 该功能本身已内置在语言本身中,例如用于并发和线程行为的“ goroutines”,而Go标准库包(例如Go的http包)中提供了附加功能。 像Python一样,Go提供了包括垃圾回收在内的自动内存管理功能。
    与Python等脚本语言不同,Go代码可编译为快速运行的本机二进制文件。 而且与C或C ++不同,Go的编译速度非常快-足够快,使使用Go的感觉比使用已编译的语言更像是使用脚本语言。 此外,Go构建系统比其他编译语言的系统更简单。 构建和运行Go项目只需几个步骤,几乎不需要记账。
  • 速度。 Go二进制文件的运行速度比C二进制文件慢,但是对于大多数应用程序,速度的差异可以忽略不计。 在绝大多数工作中,Go性能与C一样好,并且通常比以开发速度闻名的其他语言(例如JavaScript,Python和Ruby)快得多。
  • 可移植性。 使用Go工具链创建的可执行文件可以独立存在,而没有默认的外部依赖关系。 Go工具链可用于多种操作系统和硬件平台,并可用于跨平台编译二进制文件。
  • 互操作性。 Go在不牺牲对底层系统的访问的情况下提供了上述所有功能。 Go程序可以与外部C库对话或进行本机系统调用。 例如,在Docker中,Go与低级Linux函数,cgroup和命名空间进行接口,以发挥容器魔力。
  • 支持。 Go工具链可作为Linux,MacOS或Windows二进制文件或Docker容器免费提供。 Go默认包含在许多流行的Linux发行版中,例如Red Hat Enterprise Linux和Fedora,这使得将Go源代码部署到这些平台上更加容易。 从Microsoft Visual Studio Code到ActiveState的Komodo IDE,许多第三方开发环境对Go的支持也很强。

Go语言最有效的地方

没有一种语言适合所有工作,但是某些语言比其他语言适合更多的工作。

Go在开发以下应用程序类型方面表现最为出色:

  • 分布式网络服务。 网络应用程序通过并发生存和消亡,Go的本机并发功能(主要是goroutinechannel)非常适合此类工作。 因此,许多Go项目都用于网络,分布式功能和云服务: API , Web服务器 , 用于Web应用程序的最小框架等。
  • 云原生开发。 Go的并发性和网络功能及其高度可移植性使其非常适合于构建云原生应用程序。 实际上,Go被用于构建云原生计算的几个基石,包括Docker , KubernetesIstio 。
  • 现有基础设施的替代品。 我们用于Internet基础结构的许多软件正在老化,并且被漏洞利用所破坏。 用Go重写这些东西具有许多优点-更好的内存安全性,更容易的跨平台部署以及干净的代码库,以促进将来的维护。 Go中正在编写一个 称为Teleport的新SSH服务器一个新版本的网络时间协议 ,以替代传统的SSH服务器 。
  • 实用程序和独立工具。 Go程序可以编译为二进制文件,并且具有最低的外部依赖性。 这使得它们非常适合创建实用程序和其他工具,因为它们启动Swift并且可以很容易地打包以便重新分发。

语言限制

Go的自以为是的功能集受到赞扬和批评。 Go的设计偏向于小巧易懂,但特意省略了某些功能。 结果是故意无法在Go语言中使用某些其他语言中常见的功能。

这样的功能之一就是泛型,它允许函数接受许多不同类型的变量。 Go不包含泛型,并且基于泛型会损害语言的简单性,该语言的管理员反对添加它们。 可以解决此限制 ,但是许多开发人员仍然渴望看到以某种方式向Go添加了泛型。 至少有人提出了在Go中实现泛型的建议,但没有一成不变的建议。

Go的另一个缺点是生成的二进制文件的大小。 Go二进制文件默认情况下是静态编译的,这意味着运行时所需的所有信息都包含在二进制映像中。 这种方法简化了构建和部署过程,但以简单的“ Hello,world!”为代价。 在64位Windows上的重量约为1.5MB。 Go团队一直在努力减少每个后续发行版的二进制文件的大小 。 也可以通过压缩删除Go的调试信息缩小Go二进制文件 。 对于独立的分布式应用程序,最后一个选项可能比云或网络服务更好,后者在服务到位时具有调试信息很有用。

Go的另一个被吹捧的功能是自动内存管理,这可以看作是一个缺点,因为垃圾回收需要一定数量的处理开销。 从设计上讲,Go 不提供手动内存管理功能 ,而Go中的垃圾回收由于无法很好地处理企业应用程序中出现的各种内存负载而受到批评。 从好的方面来说,Go 1.8 对内存管理和垃圾收集进行许多改进,从而减少了所涉及的滞后时间。 当然,Go开发人员确实能够在C扩展中或通过第三方手动内存管理库使用手动内存分配。

关于为Go应用程序(例如桌面应用程序中的应用程序)构建丰富的GUI的软件文化仍然散落。

大多数Go应用程序是命令行工具或网络服务。 也就是说,各种项目正在努力为Go应用程序带来丰富的GUI。 GTKGTK3框架具有绑定。 另一个项目旨在提供平台原生的UI ,尽管它们依赖于C绑定并且不是用纯Go编写的。 Windows用户可以尝试散步 。 但是在这个领域还没有明显的赢家或安全的长期赌注出现,并且一些项目(例如Google试图构建跨平台GUI库的项目 )已经被抛在了一边。 另外,由于Go在设计上是与平台无关的,因此这些都不大可能成为标准软件包的一部分。

尽管Go可以与本机系统功能对话,但它并不是为创建底层系统组件而设计的,例如内核或设备驱动程序或嵌入式系统。 毕竟,Go运行时和Go应用程序的垃圾收集器依赖于底层操作系统。 (对这种工作感兴趣的最先进语言的开发人员可以考虑使用Rust语言 。)

去语言期货

Go开发的下一阶段很可能更多地由其开发人员基础的需求和需求驱动,Go的助手改变语言以更好地适应该受众,而不是仅凭example强的榜样。 换句话说,Go可能会获得原本不打算使用的功能,例如泛型。

显然,Golang开发人员想要这些东西。 2018年Go用户调查显示 ,在更广泛地采用Go以及更好的依赖关系和软件包管理方面,仿制药成为三大挑战。 GitHub上现有的关于泛型的提案仍然有效,作为Go 2.x的提案。 诸如此类的更改可能会帮助Go在企业开发中占据更中心的位置 ,在Java,JavaScript和Python当前主导地位。

即使没有重大更改,我们也可以预期将Go用作基础结构重建项目,这是上述SSH和NTP的替代品,并且是多语言项目的一部分。

Go工具链的第三方实现也已激增。 ActiveState的ActiveGo提供了Go语言的商业支持版本,并且LLVM和gccgo项目都通过替代工具链提供了自由许可的Go开源实现。

最终,Go成为开发全新语言的基础,尽管其中的两个示例已停止积极开发。 一个例子是Have语言 ,该语言简化了Go语法,以自己的方式实现了一些相同的概念,并被转换为Go以便于执行。 另一个已解散的项目Oden使用Go的汇编器和工具链来编译一种新设计的语言,该语言从Lisp和Haskell等语言中获得了更多启发。

最后一组项目说明了任何IT创新真正革命性的方式之一-当人们将其拆散并重新调整用途时,发现其设计者从未打算使用的用途。 Go语言作为可入侵项目的未来才刚刚开始。 但是已经确定了它作为主要编程语言的未来,当然在云中也是如此,因为Go的速度和简便性简化了可扩展基础结构的开发,可长期维护该基础结构。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-Cn7KJGM962abfb84cf394.jpeg

  • 发表于 2021-05-19 10:52
  • 阅读 ( 1154 )
  • 分类:Golang

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章