写点什么

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:293302
用户头像

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

关注

评论

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

Apipost免费版、企业版和私有化部署详解

数据追梦人

Amazon Q 从入门到精通 – 集成企业代码库

亚马逊云科技 (Amazon Web Services)

MES系统数据采集功能:自动化设备数据采集

万界星空科技

数据采集 mes 设备 设备管理 设备数据采集

什么是安全密钥,它是如何工作的

运维有小邓

单点登录 多因素身份验证 安全密钥

高防IP是如何防护DDoS攻击和CC攻击的

网络安全服务

IP 带宽 高防服务器 高防IP DDoS 攻击

什么是商业分析报告,怎么制作?AI智能体使用攻略盘点!

职场工具箱

人工智能 项目分析报告 AIGC AI智能体 AI 智能体

马蹄链DAPP代币合约流动性挖矿分红系统开发详细及方案

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

浅谈国产数据库多租户方案:提升云计算与SaaS的资源管理效率

猫头虎

数据库

OpenManus:开源版 Manus,无需邀请码,5 分钟极速体验!

阿里巴巴云原生

阿里云 云原生

Metasploit Pro 4.22.7-2025042101 发布 - 专业渗透测试框架

sysin

Metasploit

NetScaler 13.1 Build 58.21 发布 - 混合多云应用交付控制器

sysin

NetScaler

AI与智能能源管理:如何通过AI优化能源分配和消耗?

天津汇柏科技有限公司

人工智能 AI

12种API认证全场景解析:从Basic到OAuth2.0,哪个认证最适合你的业务?

数据追梦人

征程 6 VIO Frame buffer管理

地平线开发者

自动驾驶; 算法工具链 地平线征程6

HCLSoftware推出解决方案

财见

深入研究:Shopee商品详情API接口详解

tbapi

Shopee shopee API shopee商品详情接口

开发认为测试不及时,测试吐槽工作量太大?

禅道项目管理

DevOps 软件开发 效能管理 测试人员 测试效率

如何做到供应链的协同管理?

积木链小链

数字化转型 智能制造 供应链管理

十几行代码实现 Manus,Spring AI Alibaba Graph 快速预览

阿里巴巴云原生

阿里云 云原生

基于DeepSeek的故障定位大揭秘

乒乓狂魔

故障定位 AIOPS 可观测

代币经济学赋能社区自运营:构建Web3时代的永动飞轮

区块链软件开发推广运营

dapp 交易所开发 链游开发 公链开发 代币开发

通过阿里云Milvus与通义千问VL大模型,快速实现多模态搜索

阿里云大数据AI技术

大数据 阿里云 向量检索 多模态 Milvus

企业AI成功落地的关键:生产级AI应用背后的“脏活累活”

UniverAI智宇苍穹

开发平台 企业 AI 应用 AI落地 AI 大模型 企业级AI工程化

加密叙事危机:当「传说」构建让位于营销狂欢

TechubNews

Markdown 所见即所得(WYSIWYG)编辑器的研究

yuanyxh

前端 Typora Markdown 编辑器

什么是公链?公链项目有哪些?公链项目开发

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

政企产品经理AI工作流分享:需求->产品的敏捷实现(深度长文)

Ben的AI实验室

AI 产品经理 工作流 GPT DeepSeek

动态更新技术重构中国互联网:前端热更新的效率革命与生态演进

xuyinyin

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