本文选自:外刊IT评论网
我们SoundCloud是一个使用多种编程语言的公司,虽然我们的技术架构最外层一直使用的是Ruby on Rails,但是在后端,各种各样的编程语言都有涉及。在这里我想多讲一下为什么要使用和如何使用Go这样一种开源的、刚刚发布其1.0版本的编程语言的。
在我们的公司里,所有的技术人员都是全能选手,而不是专才,这是根植于公司基因文化里的特征。我们希望每个人都能对公司的基础架构中每一部分都至少有相当的了解。更进一步,我们鼓励技术人员在个开发团队间调换,甚至组成新的团队,使成员跟各团队的冲突和摩擦尽量减少。在这样一种代码共产共有的环境中,非常需要一种表达性强,效率高的语言来降低实施的困难,Go语言证明了它是一种非常适合的语言。
GoogleGolanguage
我们已经有好几个程序员都把Go语言描述为是一种所见即所得(WYSIWYG)的编程语言。这是说,代码要做的事和它在字面上表达的意思是完全一致的。这种特征对于使软件无歧义和可维护有着巨大的帮助。Go语言明确的拒绝“helper”习惯用法以及诸如统一访问原则(Uniform Access Principle)、操作符重载、缺省参数、甚至异常等特征,基本上,这些特征相较于能产生更丰富的表达,它们的歧义性会带来更大的问题。不否认,这样的策略会带来更多的键盘敲击——尤其是,正如大多数参与Go语言项目的新手程序员痛斥的,在异常处理时最麻烦——但是,换来的报答是,还是这些新手程序员,他们能轻易的、迅速的将应用在脑海里形成一个完整的模型。我可以很有信心的告诉大家,从项目开始到提交代码,Go是我们使用过的效率最高的语言。
Go语言严格的结构原则和它的“一种事情有且只有一种方法完成”的思想意味着我们无需在风格问题上纠缠不休。在针对Go语言程序的代码审查上,审查会变得更针对问题,而不是针对语言上的错综复杂,这是每个人都愿意看到的。
更值得一提的是,一旦一个程序员对Effective Go有了一个基本掌握,你会发现他们的关注点能非常自然的从“应用目前应该怎样运行”过度到“应用在理想状况下应该如何的运行”。是否是后台的响应缓慢致使整个请求失败?是否应该只重试一次,不成功就只提供部分的结果?浏览器表现异常,我们是否要设置一个250毫秒的超时限制?系统中任何一个外层的行为场景都能用一种直接的、理想化的实现来表示,不需要类库或框架的支持。去掉抽象层降低了复杂性;直白陈述式、简单的代码是更好的代码。
Go语言还有其它一些非常好的特征,让我们受益不少。静态类型和快速编译使我们能够在开发过程中做几乎实时的静态检查和单元测试。这也意味我们开发的基于Go语言的系统中的编译,测试和发布几乎是一起完成的。
事实上,快速的编译,快速的测试,快速的相互审查和快速的部署意味着你的一些想法能在一个小时内从白板上的设计变成产品中可运行的程序。例如,Next软件中的搜索基本功能是由Elastic Search驱动的,但是它接受SoundCloud的管理和交换几乎全部是Go服务来完成。在验证过程中,我们认识的,我们需要一种能在某个特殊环境中把索引标志为只读状态的方法,需要索引系统能知道并顺从这种状态。在代码中加入抽象层,开发一个新的入口点正确的检测这种状态,修改跟索引相关的行为,为它们写测试代码,这一切只用了半个下午的时间。晚上时,这些修改已经部署并运行了好几个小时了。这样的速度,尤其是对一种静态类型的,本地编译的语言,简直没得说了。
我说到了我们的编译和部署系统。它叫Bazooka,它被设计成一个平台,用来管理内部服务的部署。(我们很快就会把它开源;关注我们,不要走开!)我们曾通过一个情况复杂的网络环境升级12-Factor应用,你可以把它当成一个巨大的、复杂的状态机,随时都有可能造成数据污染和相互竞争的状态。对于这种工作,Go语言是最自然的选择。Go语言很独特,它有天生的并行安全特征。Bazooka系统的开发人员能够分析出问题的复杂性而不需要使用那些复杂的辅助工具。Bazooka利用Doozer来协调它的共享状态,Doozer是世界上唯一一个Paxos开源实现软件(就我们所知)——它也是用Go语言开发的。
总之,我们在SoundCloud公司维护着都是用Go语言写成的十几种服务和十几种知识库。当有新的后台项目时,我慢慢的都会选择使用Go语言来完成。
你对使用Go语言解决真正问题和开发真正产品感兴趣吗?我们很乐意听到你的声音!
---------------------------------------------------------------------------
[本文英文原文链接:Go at SoundCloud ]
图灵的两本相关图书:
分享到:
相关推荐
Go 语言,也被称为 Golang,是由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 在 2007 年设计的一种静态类型的编程语言。它旨在提供高效的开发体验,同时保持简洁的语法和内置的并发支持。Go 语言在...
golang语言,window系统下安装go语言包安装包 在 Windows 系统下安装 Go 语言包,可以按照以下步骤进行: 下载 Go 语言包 在官网 https://golang.org/dl/ 中下载适合你系统的Go语言包,选择 .msi 安装包下载即可。 ...
在高级主题部分,你将学习到Go语言的反射(reflection)、类型断言(type assertion)、类型系统以及Go语言的工具链,包括编译器、链接器、go build、go run等命令的使用。最后,书中可能会提供一些实战案例,展示如何...
在数组、Maps、Structs、接口部分,作者详细介绍了Go语言中的数组、Maps、Structs、接口等数据结构,包括定义、初始化、使用等内容。 在数组部分,作者讲解了Go语言中的数组,包括数组的定义、初始化和使用。 在...
Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的语言。它旨在提高编程效率,简化并发编程,并强调简洁的编程哲学。Go语言的设计受到了多门经典编程语言的影响,如C语言、...
在本项目中,我们关注的是使用Go语言实现的Modbus协议通过DTU(Data Transfer Unit)TCP链接进行数据采集。这个项目源码提供了一个详细的实际应用案例,让我们深入理解Go语言在工业通信中的应用。 首先,`Modbus`是...
Go语言,也称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。Go语言的设计目标是提高程序员的工作效率,它具有高表达力、简洁、清晰和高效的特性。Go语言的一个显著特点...
这份笔记基于韩顺平老师的Go语言视频教程,内容丰富,覆盖了Go语言的各个方面,对于想要系统学习Go语言的初学者或者希望提升Go语言技能的开发者来说,具有很高的参考价值。 Go语言,也被称为Golang,是由Google公司...
在本文中,我们将深入探讨如何使用Go语言来实现京东抢购茅台酒的自动化脚本。Go语言,也称为Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的编程语言,因其高效性能和简洁的语法而受到广大...
Go语言,又称为Golang,是由Google开发的一种静态类型的、编译型的、并发型且垃圾回收的编程语言。它设计简洁、效率高,特别适合于编写服务器端和网络应用。Go语言的语法接近C语言,但同时也引入了诸如goroutine(轻...
Go 语言,也被称为 Golang,是由 Google 在 2009 年推出的开源编程语言。设计时,它旨在提供高效的开发环境、简洁的语法、并发支持以及强大的工具链,使其成为开发网络服务、分布式系统和微服务的理想选择。本文将...
谷歌的Go语言,也被称为Golang,是由Google在2009年推出的一种开源编程语言。它被设计为简洁、高效、并发性好,并且具有内置的垃圾回收机制,使得开发人员可以更专注于编写可维护的代码。这个“谷歌GO语言教程PDF”...
Go语言是一种开源编程...通过理解这些知识点,开发者能够有效地掌握Go语言,为开发高性能的应用程序打下坚实的基础。随着对Go语言不断深入的学习和实践,开发者将能够充分体验到它的简洁、高效和强大的系统编程能力。
在本资源包中,我们关注的是"Go语言项目实战源码资料",这是一份针对Go(也称为Golang)编程语言的实践性学习材料,特别适用于那些希望通过实际项目提升Go语言技能的开发者。"Go语言项目实战-up视频源码"意味着这份...
Go语言,通常被称为Golang,是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。它具有简洁、快速、安全和现代的特点。Go语言设计团队的初衷是为了让编程更加简单、高效,同时能够应对...
自2009年发布以来,Go语言因其简洁的语法、高效的性能以及对并发编程的良好支持,受到了广大开发者的欢迎。在本篇文章中,我们将深入探讨Go语言的主要特性和编程技巧。 1. **Go语言基础** - **语法简洁**:Go语言...
《Go语言程序设计》这本书是学习Go语言的重要资源,它为读者提供了全面而深入的Go语言知识。Go语言,也称为Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。其设计目标是提高...
Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的、C风格的编程语言。它旨在提高编程效率,简化系统编程,并且能够支持大规模的网络服务和分布式计算。Go语言实战教程是学习Go...