免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

采访: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:558072
用户头像

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

关注

评论

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

寻找“乘风破浪”的出海创新势力丨 2023出海企业创新价值榜报名启动

创业邦

《零代码应用实例》,从案例到使用

明道云

好用的无损播放器:Audirvana v3.5.50中文激活版

真大的脸盆

Mac 软件 音乐播放 无损播放器

开心档之MySQL WHERE 子句

分享交流丨九科信息董事&产品VP傅恺受邀出席第三届ISIG中国产业智能大会并分享企业优秀案例

九科Ninetech

ChatGPT4.0,基础生产力的变革!

老张

人工智能 ChatGPT ChatGPT4

秒懂算法 | 链表

TiAmo

算法 链表 C++ STL 静态链表 动态链表

IT 数字化转型

L3C老司机

数字化转型 产品研发 工程效能 项目交付 胜任力模型

开心档之MySQL 序列使用

百度荣获 CCIA数据安全工作委员会突出贡献奖

百度安全

发声全球边缘计算大会,火山引擎荣获“最佳边缘云服务商”称号

火山引擎边缘云

火山引擎 边缘云 火山引擎边缘计算

ChatGPT研究(一)——AI平民化的里程碑

Chares

人工智能 机器学习 AIGC ChatGPT

新能源的B面:下沉市场的机会与变量

Alter

新能源 下沉市场

浙江杭州|Hi TECH 2023 年全球青年创业大赛

科兴未来News

数字经济 杭州 新能源 生物医药 #双创赛事#

功能全面的数据库软件:DBeaverUltimate 中文旗舰版

真大的脸盆

Mac 数据库管理 Mac 软件 管理数据库 数据库工具

电商秒杀系统

Ryan

Spring 项目运行提示错误 Not a managed type

HoneyMoose

Jenkins 修改启动的端口

HoneyMoose

GitHub开源3小时,一直被哄抢!800页全彩《微服务架构深度解析》

做梦都在改BUG

Java 架构 微服务

联想Yoga Book 9i双屏笔记本发布:两块13寸2.8K触摸屏

Geek_2d6073

C++面试必备:常见C++面试题汇总及详细解析

小万哥

面试 软件开发 C/C++ 常见 汇总

Linux 查看 SELinux 的状态

HoneyMoose

Jetpack-Compose 学习笔记(三)—— Compose 的自定义“View”

修之竹

android Compose JetPack android jetpack

强大的绘图软件:OmniGraffle中文激活版

真大的脸盆

Mac Mac 软件 绘图软件 绘图工具

WordPress 插件 g5plus 修改属性

HoneyMoose

百度获CCIA数安委《数据安全和个人信息保护社会责任指南》首批试点示范单位

百度安全

WordPress 网站 Error Establishing a Database Connection(建立数据库连接时出错)

HoneyMoose

比尔·盖茨最新AI演讲:人工智能时代已经开启

Chares

人工智能 机器学习 微软 ChatGPT

IntelliJ IDEA 2023.1 版本添加了包中类的列表功能

HoneyMoose

Linux 开启或关闭 SELinux

HoneyMoose

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