2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

采访:Go 语言编程

  • 2012-12-21
  • 本文字数:2870 字

    阅读完需:约 9 分钟

Go 语言是由 Google 在 2009 年 11 月份公布的,它的目标是要应对软件开发所面临的最新挑战。Go 语言特别被设计为快速(包括在编译时)、支持多核的语言,并且兼顾了动态语言的简单性和静态类型语言的安全性。Mark Summerfield 最近出版了《Go 语言编程》一书,目的是要帮助当前的程序员学习 Go 语言。InfoQ 最近有幸和 Mark 一起讨论了 Go 语言和他的著作。

InfoQ:你喜欢 Go 语言的哪些特点?

Mark Summerfield: Go 语言有很多特点我都非常喜欢,其中最主要的是:

  • 像闪电一样快的编译。这使得编辑 / 编译 / 运行的周期和 Python 的编辑 / 运行周期一样快。
  • 非常高级的并发。你可以很轻松地使用 Go 语言编写并发程序,而不会有任何显式的锁。另外,goroutine 通过操作系统线程多路传输的方式,这意味着,如果你的算法最好以成千上万个并发线程来表示,那么你就可以创建那么多 goroutine——而对于线程,通常最好不要创建过多。
  • 无初始化和垃圾回收。这让我们避免了整整两类错误的发生,让编码更简单。
  • 语言本身非常小,让一般的程序员就可以掌握。当考虑模板语言的时候,C++98/03 已经不是一般程序员所能接受的, 而 C++11 更大,也更复杂。与它们相比,Go 语言:
  • 使用了新奇的方式来实现面向对象。我发现这种方法很有趣。
  • 对 Unicode 的支持。我非常喜欢 Go 语言让你可以使用原生 UTF-8 或者使用根据你想要的来使用 Unicode 字符的方式。

InfoQ:你不喜欢 Go 语言的哪些特点?

Mark: 最初我不喜欢它的错误处理方法(返回错误值作为唯一或者最后一个返回值),因为我不习惯使用这样的异常处理方式。然而,现在我非常乐于使用它了。

我还忘了说操作符重载。IMO 这个大程序包(针对 big.Int 和 big.Rat 类型)很难使用,因为你无法对操作符重载。另外,尽管 Go 缺少泛型,但那只是针对于类库编写者的问题。由于 Go 拥有其它语言特性,所以不太需要泛型,比方说它对“<”的操作符重载对于定义自定义的数据类型就非常好。

InfoQ:从你作为作者的经历看,我发现你已经撰写了好几本关于 Python 的书。这两种语言相比,你的感觉如何? Go 的那些方面让你想念 Python? 相对而言,Go 的哪些方面让你可以忘记 Python?

Mark: 我要说,总体上看来,Python 3 是我最喜爱的语言。然而,Go 是我最喜欢的编译型语言。
我知道很多 Python 程序员都已经试过 Go,但是从个人来说,如果他们想要的是更好的性能,那么最好使用 numpy,如果想要快速的算法,可以使用 Cython。
Go 想要成为 21 世纪的 C 语言,当然我认为时间会验证,Go 会成为一种非常有影响力的语言。我确信它会导致其他语言至少增加 CSP 类库来支持 Go 样式的并发。

在语言和标准库方面,Go 已经比 C 更令人惊奇了。然而,C 拥有很多很多第三方类库(尽管使用 cgo 包我们也可以在 Go 中使用它们)。

我认为 Go 拥有足够的高级特性,可以吸引那些想要更高性能、更好的并发模型以及更自由许可的 Java 程序员。
我还认为 Go 可以替换 C++ 11,为 C++ 程序员提供很多内容。Go 的标准类库比 C++ 更小——但是实际上包含了更多实用的现实功能。当然,C++ 程序员会发现 Go 语言没有它们所习惯的一些东西——但是在几秒钟或者几分钟内完成编译,而不是花费几十分钟甚至几个小时会让我们更有生产力,并且 Go 要比 C++ 更易于维护,因为它是一种更小、更易于理解的语言。当然,Go 并不是 C++,在三点上还是有区别的(C 预处理程序,它没有 scope 的概念;C++ 运行时语言;C++ 编译时语言,即模板)。

此外,Go 程序会编译成单一的可执行文件,而没有任何外部依赖。这使得部署——比方说,在一个组织中所有计算机上——更容易,不需要担心所有计算机是否都拥有相同的类库。

Go 语言即让大家感到熟悉(在 C 家族中),并且还在关键问题上(面向对象、并发、错误处理、轻量级语法)采取了非常先进的标准,这使得 Go 非常值得学习,至少我认为是主流编程中可选的一种方法。

InfoQ:非常感谢你对 Go 做出的与其他语言的比较,特别是描述了与 C++11 相比,它是如何降低了复杂度。你是否发现 C++11 也做出了足够重大的变化,会导致现有的程序员在拥有足够自由度的时候考虑转换到 Go 语言?

Mark: 尽管我认为从 C++98/03 到 C++11 的发展历程表示有机会可以重新评估并转换到 Go 语言,但是我认为大多数人实际上不会那么做。C++ 需要在学习上投入很多。我猜想很多程序员会继续使用 C++11 的子集,而不是更换语言,特别是对于比 C++11 小的语言(那样看起来特性也比较少)。当然也会有些人转换到 Go 语言,特别是那些拥有能够从 Go 的高级并发模型中受益的应用程序的人。

使用 C++98/03 我们已经有一种形势,很多程序员使用语言的特定子集,让他们感到很舒服。当两位或更多使用不同子集的 C++ 程序员必须一起工作,或者维护不是他们编写的 C++ 代码的时候,就会导致问题。我认为 C++11 会显著地放大这个问题。

Java 的设计要比 C++ 更简单,并在很多方面都很成功。Go 是要设计成更好的 C,所以我期望它会赢得更多 C 程序员(对他们来说全都是收获)而不是 C++ 程序员(对他们来说既有收获,也会失去一些特性,像泛型)。

InfoQ: 你对 Go 语言的简洁性大加赞赏,但是否有一些你认为应该增加的特性呢? (可能会期望增加操作符重载和泛型。)

Mark: 我认为你可能需要操作符重载,而不需要泛型。但是我认为唯一真正缺少的是排序的映射表(ordered map)(尽管我在书中提供了对左倾红黑树的 Go 实现作为例子,它也填补了特定的空白)。

InfoQ: 你在书的目录中还特别说明了专利流氓的危险。是什么让你包含这项内容呢? 你是否认为有必要提醒大家意识到这个问题,或者是特定的什么事情?

Mark: 我一点儿也不喜欢专利:我认为那是反竞争的,并且大公司会比小公司更喜欢它。对于软件,版权就已经足够了。我之所以包含了附录,是因为现在我已经开始听说有些程序员开始从美国的市场(例如编写 iOS 程序的人们)撤回软件,因为不那么做的话,就需要给专利流氓支付“保护费”。软件专利使得个人程序员或者小团队更难竞争,我认为这不仅仅是可耻,而且在道德上是错误的。

在过去的几年间,我对商业化软件有一些看法:利基(niche)产品会很有用,而不是大规模的销售团队。然而,我并不准备付出时间,因为我主要的市场还是美国,对于我来说冒着花费时间和精力的风险,而只是让专利流氓能够“偷到”更多东西,是非常不经济的。

关于书的作者

Mark Summerfield 以一等毕业生从威尔史旺西大学的计算机科学专业毕业。在工作之前,他继续做了一年的研究生。他从事软件工程师职业多年,在加入 Trolltech 之前在多家公司中工作过。他还作为 Trolltech 的文档管理员工作了将近三年,在那期间他编辑了 Trolltech 的技术杂志《Qt 季刊》。Mark 是《

C++ GUI Programming with Qt 3 》和《

C++ GUI Programming with Qt 4》的共同作者,并且是《

Rapid GUI Programming with Python and Qt: The Definitive Guide to PyQt Programming》的作者。Mark 是

Qtrac Ltd. 公司的老板,在其中他作为独立作者、编辑、培训师和顾问工作,专注于 C++、Qt、Pytho 和 PyQt。

查看英文原文: Programming in Go - An Interview

2012-12-21 02:558542
用户头像

发布了 340 篇内容, 共 144.9 次阅读, 收获喜欢 13 次。

关注

评论

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

元图CAD重新定义工程设计的智能化未来

元图CAD

人工智能 cad 工程设计

RestCloud iPaaS与MQ消息集成如何重塑企业集成韧性

谷云科技RestCloud

数据传输 数据同步 集成平台 ipaas MQ消息

阿里云 AI 中间件重磅发布,打通 AI 应用落地“最后一公里”

阿里巴巴云原生

阿里云 RocketMQ 云原生

智源 RoboBrain-X0 开源,打破机器人跨本体泛化困境

智源研究院

网易伏羲受邀亮相2025云栖大会,展示AI领域前沿创新成果

网易伏羲

网易伏羲 游戏AI 具身智能 群体智能 网易雷火

低代码5大实用模块实操指南:收藏/公告/消息/统计/服务器信息

引迈信息

城市电商小程序管理系统:助力商家搭建全渠道数字化经营体系

微擎应用市场

一键登录技术横评:MobTech秒验如何提升APP转化率35%?

MobTech袤博科技

网易雷火胡志鹏:AI驱动未来,游戏科技重塑虚拟创造力与现实生产力

网易伏羲

人工智能 网易伏羲 具身智能 网易雷火 游戏科技

除了Nano banana,还有哪些AI工具可以生成手办模型图?

职场工具箱

AIGC 通义千问 Ai绘图 Qwen AI生图

破解肉制品管理难题:MES系统核心功能与实施指南​

万界星空科技

mes 食品加工行业 肉制品加工 AI智能化MES 肉制品加工MES

破局海外社交迷宫:ShareSDK如何为出海APP构建技术捷径?

MobTech袤博科技

TapTalk | 圆桌实录:澳门综合度假村敏捷转型之旅,MongoDB + TapData 赋能酒店业卓越实践

tapdata

客户数据平台 CDP 敏捷转型 CDC 实时数据平台

嘉为蓝鲸2025年应急灾备中心V2.0:精细化权限管控,全流程打通保障业务连续

嘉为蓝鲸

应急灾备管理中心 IT应急平台 IT灾备平台 应急管理平台 灾备管理平台

2025年APP开发必看:从20+SDK到3款集成的效率革命

MobTech袤博科技

2026浙江安博会·杭州国际安防产品博览会

AIOTE智博会

安防展 安博会 浙江安博会 安防展会 杭州安博会

公众号文章中插入外部网页链接教程(2026 最新版)

Ceelog

公众号

续航与智驾的双重进化,猛士M817 Max+版新款上市如何重塑智能越野的竞争力核心?

极客天地

避坑指南:TDengine 和 PI System 谁更适合大规模场景?

TDengine

tdengine 时序数据库

产品动态 | 重磅发布!秒验全面支持香港移动号码认证,助力移动互联网企业跨境出海

MobTech袤博科技

百度电商MultiAgent视频生成系统

百度Geek说

视频创作 AIGC

嘉为蓝鲸2025年运维大模型开发平台V2.0:空间权限精细化管理,保障运维智能体资源安全

嘉为蓝鲸

智能运维 数据运维 运维大模型 大模型运维 运维开发大模型

曼德博洛特集合

Miracle

ETL参数化技巧:如何避免写一堆重复任务?

谷云科技RestCloud

数据处理 数据传输 ETL 数据集成平台 参数传递

项目开发实施交付验收资料集

金陵老街

KTV 娱乐小程序管理系统

微擎应用市场

APP跨境出海爆火!3款免费SDK工具助力开发者0成本全球化

MobTech袤博科技

从“看得见”到“能决策”:Operation Intelligence 重构企业智能运维新范式

阿里巴巴云原生

阿里云 云原生 可观测

阿里云发布《AI 原生应用架构白皮书》

阿里巴巴云原生

阿里云 云原生

采访:Go语言编程_语言 & 开发_Jeff Martin_InfoQ精选文章