套用独立乐队Cracker的话说,现在世界需要的是另一种编程语言,比如我需要在脑袋上打个洞。尽管如此,围棋已经慢慢地,但肯定地像一棵爬行的藤蔓一样淹没了开发界,以一种郁郁葱葱-在许多方面都是优越的-编程力量的掩护覆盖了它之前的一切。随着它越来越受欢迎,你有很多理由应该仔细看看。
据说,谷歌工程师在等待其他程序编译的同时设计了围棋。他们对工具集的失望迫使他们从头开始重新思考系统编程,创建了一个精简、简陋且经过编译的解决方案,允许在压力下实现大规模多线程、并发性和性能。
在现代硬件上运行Go--甚至在容器内或在虚拟机上运行Go--可能是一种真正的乐趣。由于GO是为在多核上运行而设计的,因此它被构建为支持并发性和随着核的添加而扩展。此外,它的多线程功能--尤其是它的Goroutines--是一个令人惊讶且受欢迎的新功能。
在我们深入研究之前,让我们先来看看Goroutines。这些本质上是在程序其余部分完成时运行的并发函数。换句话说,您可以启动一个Goroutine,让它运行,并在它及其数千个兄弟进程在后台运行时继续运行。网络超时?不要担心,当主循环继续时,您的Goroutine将会处理它。数据库完全故障?你的Goroutine会知道的,你可以优雅地绕过这个问题。
程序包mainimport(";fmt";";)func Hello(){fmt.Println(";Hello world goroutine";)}func main(){go Hello()time.Sept(1*time.Second)fmt.Println(";main function";)}。
Main函数的工作方式与在C中一样。在这段代码中,main触发一个称为Hello()的goroutine(由go关键字指示)。该程序会快速打个盹,然后继续。如果Hello()函数中发生任何事情,main函数都不会注意到。最重要的是工作已经完成。
当main例程醒来并发出一个Println时,程序结束。Hello()函数可以是任何东西--数据调用、事务、队列条目--它会在程序的其余部分运行时运行。就像前面提到的藤本植物一样,可以把Goroutine看作是小花,它们会在主藤继续生长的同时分枝枯死。
想看看它的实际效果吗?看看Go游乐场上的这段视频,你会看到大猩猩是如何工作的。
仅此一项功能就值得入场费。对于Web应用程序,Goroutines可以让你在运行并发作业的同时避开路障。例如,如果您正在等待数据输入,则即使用户正在打字,Goroutine也可以触发以提供预先填充的文本。换句话说,即使并发进程花费的时间比预期的要长,您的程序也会继续运行。
纳维恩·拉马纳坦在围棋学习资源GoLangBot上写道:“Goroutine被多路传输到更少的操作系统线程上。”“在包含数千个Goroutine的程序中可能只有一个线程。如果线程中有任何Goroutine阻塞(比方说,等待用户输入),则创建另一个OS线程,并将剩余的Goroutine移动到新的OS线程。所有这些都由运行时负责,作为程序员,我们从这些复杂的细节中抽象出来,并被赋予一个干净的API来处理并发性。“。
近年来,您可能已经看到一些tweet或博客认为Go比Perl/Python/C/等等更好。我们都在使用一些东西-见鬼,我甚至使用命令行PHP-在我们的服务器上做一些小事情。想看木头吗?Perl。想要定期发推文吗?蟒蛇。想要管理来自数千个并发用户的传入数据吗?Java或C++一直是您的答案。那么围棋是不是“更好”了呢?
好吧,去吧,这一切我都能做到。Go确保您的工具箱可在所有平台和所有硬件上编译。它使用了一种令人惊讶的简单的包管理解决方案,该解决方案“恰到好处”,而且非常便携。你可以很容易地用Go替换你的脚本语言,当你的编译语言与Go解决方案相比较时,你的编译语言肯定会变得物有所值。
围棋是为当今的软件工程而设计的。不是所有的新事物都是完美的,但是当一种编程语言完全针对我们大多数人现在使用的环境而设计时--可扩展的、基于云的、性能优化的服务器--很多事情都可以做得很好。Go几乎可以在任何机器上编译,所以你可以用它来创建一个完整的网络应用程序或一个工具来清理传入的数据进行处理。和之前的Perl一样,Go是一把瑞士军刀,但它去掉了过去几十年来在编程平台上增加的所有开销和额外的垃圾。
围棋很简单。作为一名开发人员,我能够在一个长周末学习语言和框架。这让我了解了几个重要的平台,而且,因为我不需要每天编写代码,所以在创建小的副产品时,有足够的绳索让我上吊。围棋就不同了。对于已经了解编程基础或其他几门语言的人来说,学习围棋最多只需要几个小时。一旦您了解了它的诀窍,就可以开始编写代码了。同样,因为它太快了,您会想要将它用于您使用命令行解释器进行的几乎所有操作,从而取代您的bash脚本、Python草图和Java工作。
走得很快。看看穆罕默德·法迪尔的《围棋》中这张聪明的待办事项清单吧。代码非常简单--在Docker中建立一个MySQL数据库,添加一些HTML,几乎立刻就会有一个在命令行编译的超高速Web应用程序。此外,法迪尔还探讨了他为什么喜欢围棋:速度。
在regex测试中,regex-redux-go运行时间为3.55秒,而Java运行时间为5.58秒。围棋程序包含102行代码,而Java程序包含70行代码。诚然,Go确实比Java稍强一些,但考虑到Go击败了下一个最流行的系统语言的速度,很明显你没有牺牲速度。
随着Go作为微服务和网络的标准语言变得越来越有用,Go正在接管许多开源和私人项目。它可能开始取代性能较差的解决方案,如Java和C。
不要轻信我的话。有关编写Web应用程序、命令行工具和服务的建议,请访问GoLang.org。
“就我个人而言,我相信围棋是新的Java。许多开源项目(例如Jaeger、Kubernetes、Docker、InfluxDB、Serf等)。现在都是用围棋写的。相比之下,较老的项目(例如,Apache Kafka、Apache Hadoop、Apache Spark等)。都是用Java编写的。“Fadhil写道。
围棋就像国际象棋,或者,嗯,围棋:它需要片刻的时间来学习,需要一生的时间来掌握。幸运的是,与国际象棋不同,围棋的难度随着经验的增加而降低,很快你就可以用世界上最现代的语言之一编写速度快、速度快的程序了。
标签:Go,Golang