golang go语言_Go语言真正有什么用处?

golang go语言

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

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

[同样在InfoWorld上: 证明了Google Go功能的10个开源项目 。 | 开始使用Google的Go语言 。 | 最好的Go语言IDE和编辑器 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

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容器免费提供。 在许多流行的Linux发行版中默认包含Go,例如Red Hat Enterprise Linux和Fedora,这使得将Go源代码部署到这些平台上更加容易。 从Microsoft Visual Studio Code到ActiveState的Komodo IDE,许多第三方开发环境对Go的支持也很强。

Go语言最有效的地方

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

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

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

语言限制

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。 GTK和GTK3框架具有绑定。 另一个项目旨在提供平台原生的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的速度和简便性简化了可扩展基础结构的开发,可长期维护该基础结构。

翻译自: https://www.infoworld.com/article/3198928/whats-the-go-language-really-good-for.html

golang go语言

你可能感兴趣的:(编程语言,python,linux,java,人工智能)