发布于:2020-12-24 16:14:20
0
247
0
用独立乐队Cracker来解释,现在世界需要的是另一种编程语言,就像我需要在头上挖个洞。 就是说,Go像爬藤一样缓慢而可靠地淹没了开发世界,它以郁郁葱葱的(并且在许多方面都优越)覆盖了编程能力,覆盖了开发之前的一切。 随着它的日益流行,有很多原因需要您仔细研究一下。
传说谷歌工程师在等待其他程序编译时设计了Go。 他们对工具集的不满迫使他们重新考虑系统编程,创建了一个精益,精简和编译的解决方案,该解决方案允许在压力下进行大规模多线程,并发和性能处理。
在现代硬件上甚至在容器内或虚拟机上运行Go都是一种真正的乐趣。 因为Go旨在运行在多个内核上,所以它被构建为支持并发性和添加内核时的扩展性。 此外,它的多线程功能(尤其是goroutines)是您的绝招,令人惊讶且受欢迎。
专为并发而设计
在深入探讨之前,让我们看一下goroutine。 这些本质上是并发函数,它们在程序的其余部分完成时运行。 换句话说,您可以启动goroutine,使其运行,并在其和成千上万的弟兄在后台运行时继续运行。 网络超时? 不用担心,您的goroutine将在主循环继续时对其进行管理。 数据库完全失败? 您的goroutine将知道,您可以正常解决此问题。
看一个简单的例子:
package main
import (
"fmt"
"time"
)
func hello() {
fmt.Println("Hello world goroutine")
}
func main() {
go hello()
time.Sleep(1 * time.Second)
fmt.Println("main function")
}
main函数的工作方式与C语言相同。在此代码中,main触发名为goro()的goroutine程序(由go关键字指示)。该程序需要快速打na,然后继续。如果hello()函数发生任何事情,则主函数不会注意到。重要的是工作已经完成。
当主例程唤醒并退出Println时,程序结束。 hello()函数可以是任何东西(数据调用,事务,队列条目),并且它将在程序其余部分运行时运行。就像前面提到的藤本植物一样,想像goroutines是在主藤本植物继续生长的过程中会分支并死亡的小花。
想要看到它的实际效果吗?在Go Playground中查看此代码段,您将看到goroutines的工作原理。
仅此功能值得付出代价。对于Web应用程序,goroutine可以让您运行并发作业,同时避免障碍。例如,如果您在等待数据输入,即使用户正在键入,goroutine也会触发以提供预填充的文本。换句话说,即使并发进程花费的时间比预期的长,您的程序仍将继续运行。
最棒的是,goroutine很便宜,因此Go变得更快。
Naveen Ramanathan在Go学习资源GoLangBot上写道:“ Goroutines被多路复用到更少数量的OS线程。” “在具有数千个Goroutine的程序中,可能只有一个线程。如果该线程中的任何Goroutine阻塞(例如,等待用户输入),则会创建另一个OS线程,并将其余的Goroutines移至新的OS线程。所有这些都由运行时处理,作为程序员,我们从这些复杂的细节中抽象出来,并获得了干净的API以并发使用。”
为什么要学习Go?
近年来,您可能已经看过一些推文或博客,认为Go优于Perl / Python / C / etc。我们所有人都一直在使用某些东西(哎呀,我什至使用命令行PHP)来在服务器上做些小事情。想看日志吗? Perl。是否想发送常规推文?蟒蛇。是否要管理来自数千个并发用户的传入数据? Java或C ++始终是您的答案。那么围棋“更好”吗?
好吧,Go,可以做到所有这些。 Go确保您的工具箱可在所有平台和所有硬件上编译。它使用了一个出乎意料的简单软件包管理解决方案,“可以正常工作”,并且非常便携。您可以轻松地用Go替换脚本语言,并且与Go解决方案相提并论,您的编译语言肯定会赢得他们的青睐。
Go是为软件工程而构建的。并不是所有的新功能都很棒,但是当针对我们大多数人现在使用的确切环境设计一种编程语言时,即针对性能进行了优化的可伸缩,基于云的服务器,那么很多事情都可以解决。 Go几乎可在任何计算机上编译,因此您可以使用它创建完整的Web应用程序或工具来清理传入的数据以进行处理。像之前的Perl一样,Go是一把瑞士军刀,但是在过去的几十年中,它已经消除了所有开销和多余的垃圾,这些垃圾已经累积到编程平台上。
去很简单。作为开发人员,我已经能够在一个漫长的周末里挑选语言和框架。这使我对一些重要的平台有所了解,并且由于我不必每天编写代码,因此在创建小的副项目时有足够的绳子使自己陷入困境。去已经不一样了。对于已经了解编程或其他几种语言基础知识的人们,学习Go最多需要几个小时。掌握了技巧之后,就可以开始编写代码了。同样,由于它是如此之快,因此您几乎希望将其用于所有命令行解释器,从而取代bash脚本,Python草图和Java工作。
走快。看看Mohamad Fadhil在Go中的这份聪明的待办事项清单。代码非常简单-在Docker中建立一个MySQL数据库,添加一些HTML,几乎立刻就有了一个可在命令行编译的超快速Web应用程序。此外,Fadhil探究了为什么他首先喜欢Go的原因:速度。
在正则表达式测试(regex-redux)中,Go运行了3.55秒,而Java运行了5.58。 Go程序重102行代码,而Java程序重70行。确实,Go比Java重一点,但是考虑到Go击败第二流行的系统语言的速度,很明显不牺牲速度。
Go可以接管许多开放源代码和私有项目,并且它作为微服务和Web的标准语言变得越来越有用。它可能会开始取代性能较低的解决方案,例如Java和C。
不要相信我。请访问GoLang.org,以获取有关编写Web应用程序,命令行工具和服务的建议。
“就我个人而言,我相信Go是新的Java。现在,许多开源项目(例如Jaeger,Kubernetes,Docker,InfluxDB,Serf等)都是用Go编写的。相比之下,较旧的项目(例如Apache Kafka,Apache Hadoop,Apache Spark等)则是用Java编写的。” Fadhil写道。
围棋就像国际象棋或围棋一样:需要花一点时间学习,要终生掌握。幸运的是,与国际象棋不同,围棋的难度随经验而降低,很快您就会用世界上最现代的语言之一编写快速而激烈的程序。
作者介绍