用独立乐队Cracker来解释,现在世界需要的是另一种编程语言,就像我需要在头上挖个洞。就是说,Go像爬藤一样缓慢而可靠地淹没了开发世界,它以郁郁葱葱的(并且在许多方面都优越)覆盖了编程能力,覆盖了开发之前的一切。随着它的日益流行,有很多原因需要您仔细研究一下。

传说谷歌工程师在等待其他程序编译时就设计了Go。他们对工具集的不满迫使他们重新考虑系统编程,创建了一个精益,精简和编译的解决方案,该解决方案允许在压力下进行大规模多线程,并发和性能处理。 

在现代硬件上甚至在容器内或虚拟机上运行Go都是一种真正的乐趣。因为Go旨在运行在多个内核上,所以它被构建为支持并发性和添加内核时的扩展性。此外,它的多线程功能(尤其是goroutines)是您的绝招,令人惊讶且受欢迎。

专为并发而设计

在深入探讨之前,让我们看一下goroutines。这些本质上是并发函数,它们在程序的其余部分完成时运行。换句话说,您可以启动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由打完一个够程,表示go关键字-called hello()该程序需要快速打na,然后继续。如果hello()函数中发生任何事情,该main函数将不会注意到。重要的是工作已经完成。

main例程唤醒并触发程序时,程序完成Printlnhello()函数可以是任何东西(数据调用,事务,队列条目),并且它将在程序其余部分运行时运行。就像前面提到的藤本植物一样,想像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写道。

围棋就像国际象棋或围棋一样:需要花一点时间学习,要终生掌握。幸运的是,与国际象棋不同,Go的难度随经验而下降,很快您将以世界上最现代的语言之一编写快速而复杂的程序。