写点什么

Go 的四年与成长

  • 2013-11-13
  • 本文字数:1816 字

    阅读完需:约 6 分钟

2013 年 11 月 10 日,开源项目 Go 庆祝了它的四周年纪念日(Go 第一版发布于2012 年三月;这里说的四周年,是从最初项目创建之日开始计算的)。Go 由Robert Griesemer、Rob Pike 和Ken Tompson 在Google 创建,随后Ian Taylor 和Russ Cox 也在开源之前加入了项目。以下是来自其 FAQ 的一段摘录:

Go 的诞生,源自对现有系统编程的语言和环境的挫败感。编程已经变得太过艰难,而其中部分原因应当归咎于语言的选择。开发者必须在高效编译、高效执行与易于开发之间做出抉择;然而,在主流编程语言中,并不存在一门语言能够同时实现三方面因素。侧重易用性胜过安全和效率的程序员们,会转而使用动态类型语言,例如 Python 和 JavaScript,而不是 C++,而且他们在一定程度上或许也丢开了 Java。

Go 尝试着将动态类型解释语言在编程方面的易用性,与静态类型编译语言的效率和安全性进行结合。它的目标还包括成为支持网络和多核计算的现代语言。最后,它还需要成为一门“快速的语言”:最多花费几秒钟,就能够在单台电脑上构建起大型可执行程序。要满足这些目标,必须解决大量语言问题:兼顾表达性和轻量级类型的系统;支持并发和垃圾回收;拥有严格的依赖规范;以及其他需要解决的问题。这些问题无法通过类库和工具来完美解决,只有一门全新的语言才有可能搞定这一切。

Go 当前最新版本是 2013 年 5 月发布的 1.1 版;1.2 版预计将在本月下旬问世,另外在一份兼容性文档中提到了未来的程序与Go 1 之间的兼容性,暗示了Go 所采用的兼容性的前瞻性方法,正是其他编译式语言所缺乏的。

从发布到现在,已经有许多公司开始使用Go,例如轻量容器中的应用打包工具 Docker 、自动创建机器映像的 Packer 、提供分布式信息发送平台的 Bitly’s NSQ 、提供基础设施自动化的 Canonical’s JuJu ,以及其他许多公司。甚至自由软件基金会也在谈论用Go 取代Java 作为默认语言。Docker 团队也在一场演讲中,阐述了为何他们会选择使用Go。

而对DevOps 人群来说,其主要价值在于,Go 程序永远静态地链接到单一可执行程序中——该程序可被部署在目标平台上。因此,系统并不需要预先安装任何额外二进制文件,也无需操心同时运行不同版本的程序会产生冲突。这个特性能够与像Linux 和Java 这样的打包系统相媲美——它们拥有覆盖多个位置的类库,并要求特定的安装位置,或是一个用来预先构建路径的解析器。(下行风险是,在所有程序的静态二进制文件中,通用类库不断重复出现;但同时硬盘空间的价格并不昂贵。相反,对于运行许多进程的系统来说,服务器上的内存压力或许是更现实的问题——不重复载入某个类的映像,而是只载入一次的话,将有效减少内存压力。幸而,Devops 工具一般并不会长时间运行。)

对高可用性和多线程程序来说,主要好处是Go 的 goroutines ——它采用与 Erlang 或 Occam 相似的方式,允许执行多线程来服务收到的请求。这三者都是基于 Hoare 的通讯顺序进程( Communicating Sequential Processes ),简称 CSP。CSP 并不处理内存和进程访问,相反,每个 CSP 都拥有一个消息 / 任务的传入队列,并且能够依次将这些消息 / 任务发送给其他 CSP。CSP 支持阻塞和异步操作;每个(阻塞的)CSP 都拥有一个返回值,一般被作为返回消息发送给始发的 CSP。

Cloud Foundry 最近把它的命令行工具从Ruby 换成了Go ,以实现无需任何特定前置条件极可使用命令的目的。实际上,现在它是一个用来与后端服务沟通的轻量级工具;而且现在不再由客户端来执行复杂的验证程序,而是由它与后端沟通来完成繁重工作。这意味着该工具现在不再需要频繁升级,同时体积也得以缩小。

随着 Go 1.2 即将在下周到来,该语言也做出了改变:增加了对三索引切片(slice)的支持。此前,表达式 a[1:10] 将把数组中的 1 到 10 个元素进行切片;而现在 a[1:2:10] 将以间隔方式切出元素。一项细小的澄清是,对于使用 nil 的地方,如果取消引用会引起恐慌。其他变化请参考发行注记

一些针对的Go 批评家指出,该语言使用了一种旧式的编程返回码风格,而不是得到更广泛采用的基于异常的风格;另外与Erlang(函数式编程,没有可变状态)不同,goroutines 能够传送字典(map)。由于默认情况下字典是非同步的,因此这有可能会导致内存冲突。不过,目前很明确的是,Go 非常适合针对特定细分领域的用例;而且无论从哪方面与Java 和Erlang 这样的语言进行对比,Go 都可以被看作轻量级语言;同时,与纯C 相比,Go 或许是个更安全的选择。

查看英文原文: Go Fourth and Grow

2013-11-13 04:293006
用户头像

发布了 256 篇内容, 共 78.2 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

时代潮头,华为将风帆对准数字金融的风与海

脑极体

AIRIOT答疑第5期|如何使用低代码业务流引擎?

AIRIOT

物联网

快速支持客户知识库的核心优势是什么?

Geek_da0866

Dao智能合约Dapp系统开发技术

薇電13242772558

智能合约 dapp DAO

图像处理解决方案 veImageX 技术演进之路

字节跳动视频云技术团队

计算机视觉 图像处理 图像压缩 图像增强算法

百度搜索打击盗版网文站点:互联网内容侵权现象为何屡禁不止

石头IT视角

乘势而上,OceanBase推动数字支付精益增长

OceanBase 数据库

创建企业wiki,你需要知道这些

Geek_da0866

NFTScan 与 Atem Network 在 NFT 数据领域达成战略合作

NFT Research

NFT NFTScan

千亿营收之后,阿里云生态有了新打法

B Impact

如何优雅的改变this指向

bo

JavaScript 前端 7月月更

有数大数据基础平台之智能运维平台EasyEagle介绍:集群队列篇

网易数帆

大数据 数据智能 数据基础设施

为什么知识库很重要?这是我听过最好的答案

Geek_da0866

构建知识库时,如何避免最常见的几个错误?

Geek_da0866

Flink数据源拆解分析(WikipediaEditsSource)

程序员欣宸

Java flink 7月月更

编写一个具有搜索提示的搜索框

空城机

JavaScript 7月月更

二进制SCA指纹提取黑科技:Go语言逆向技术

华为云开发者联盟

云计算 安全 后端

硕果累累,再获认可!「报告、标准、评测」洞见科技走在前沿

洞见科技

隐私计算

如何为您的企业设置内部Wiki?

Geek_da0866

【愚公系列】2022年07月 Java教学课程 07-变量和数据类型

愚公搬代码

7月月更

【刷题记录】18. 四数之和

WangNing

7月月更

小海豚“变身”全新智能调度引擎,深入浅出在DDS的实践开发应用

白鲸开源

大数据 工作流调度 调度任务 分布式调度引擎 大数据调度

区块链开发:如何从 Solidity 智能合约中发送和取款

devpoint

区块链 Solidity 7月月更

Java基础 ——入坑必读

攻城狮杰森

Java 7月月更

利用Python浅尝算法分析

迷彩

算法复杂度 7月月更 算法分析

华为云AI院长峰会在黔举行 推动人工智能产学研创新发展

极客天地

建立的知识库的7个步骤

Geek_da0866

wallys/PD-60 802.3AT Input Output 802.3AT/AT 85% Efficiency 10/100/1000M GE Surge Protection

wallys-wifi6

MT7915/MT7975/IPQ6000

AWS使用EC2降低DeepRacer的训练成本DeepRacer-for-cloud的实践操作

指剑

AWS Amazon EC2 deepracer

网络安全之ARP欺骗防护

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

Go的四年与成长_DevOps & 平台工程_Alex Blewitt_InfoQ精选文章