写点什么

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

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

关注

评论

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

Adobe Illustrator 和 Photoshop 迎来新 AI 功能;马斯克将训练全球最强 AI丨 RTE 开发者日报

声网

NFTScan 浏览器现已支持 .mint 域名搜索功能!

NFT Research

blockchain NFT NFT\

XIAOJUSURVEY的Vue3升级之路

XIAOJUSURVEY

前端 vite Vue 3 VueRouter Pinia

erlang基础 windows系统安装erlang

万里无云万里天

erlang 测试环境

win11基础 查看防火墙的状态

万里无云万里天

防火墙 win11

37GAMES Nova(AI-CodeReview)介绍

三七互娱后端技术团队

AI CodeReview

英特尔联合国际奥委会打造AI聊天机器人,助力多国运动员迎战巴黎奥运会

E科讯

win11基础 查看本地用户和组

万里无云万里天

win11

“算法票友”搭档“技术博主”,他们说算子开发就像玩游戏打怪

Alter

AI 算法 算子

怎么在PPT中插入视频?3个PPT常用的使用技巧分享!

彭宏豪95

人工智能 效率工具 PPT AIGC AI生成PPT

2024益普索Ipsos全球人工智能监测报告

财见

rabbitmq-server基础 mqttfx连接server

万里无云万里天

RabbitMQ IoT mqtt

什么是企业全历史行为数据?为什么它是ToB大客户营销的最佳助手?

客户在哪儿AI

ToB营销 ToB获客 大客户营销 企业全历史行为数据

Kmesh v0.4发布!迈向大规模 Sidecarless 服务网格

华为云开发者联盟

云计算 云原生 华为云开发者联盟 企业号2024年7月PK榜

求职季来了,让通义灵码陪你高效备战

阿里巴巴云原生

阿里云 云原生 通义灵码

天猫店铺商品数据接口集成指南与实战技巧

tbapi

天猫API接口 天猫店铺所有商品接口 天猫店铺整店商品接口 天猫店铺商品数据采集

Go 语言 context 包实践

FunTester

从“+AI”到“AI+”,英特尔与生态伙伴共推AI大模型应用落地

E科讯

kepserver基础 创建opc ua server,进行匿名登录

万里无云万里天

工业控制 kepserver OPCUA

modsim32笔记 启动modbus tcp服务

万里无云万里天

Modbus Modbus Tcp modsim

win11基础 查看组件服务

万里无云万里天

win11 dcom

CX1概念车空气动力学设计,打造典型“美式肌肉车”风格

Altair RapidMiner

人工智能 汽车 仿真 车企数字化 altair

求职季来了,让通义灵码陪你高效备战

阿里云云效

阿里云 云原生 通义灵码

线上交流会预告!和鲸科技社区合伙人唐铭分享“学科+AI”课程搭建思路

ModelWhale

AI 直播 教学 分享会

数据分析新贵——DuckDB入门

三七互娱后端技术团队

数据分析 duckdb

modbus slave基础 查看四个地址范围的占位特点

万里无云万里天

工业控制 Modbus协议

rabbitmq-server基础 windows安装rabbitmq-server,启用mqtt服务

万里无云万里天

windows RabbitMQ mqtt

天猫商品评论接口:从申请到应用全攻略

tbapi

天猫商品评论接口 天猫API 天猫评论数据接口 天猫评论数据采集 天猫评论API

win11基础 查看更改用户账户控制设置

万里无云万里天

win11

上汽乘用车携手豆包大模型,有效提升“用户之声”的反馈处理效率

新消费日报

win11基础 查看数据执行保护

万里无云万里天

win11

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