标签 并发 下的文章

Go语言编程指南翻译记:一本书,一支队伍,一段难忘的旅程

本文永久链接 – https://tonybai.com/2024/07/05/go-fundamentals-translation

嘿,各位Gopher们!猜猜发生了什么?我们团队翻译的《Go Fundamentals:Gopher Guides》中文版终于出版啦!没错,就是那本被我们亲切地称为《Go语言编程指南》的Go入门宝典。说实话,看到这本书终于摆在书架上,我的心情就像是刚刚用Go写出了一个超高效的并发程序一样兴奋!

翻译这回事儿,我可不是新手

先让我跟大家聊聊我的“翻译前传”。其实这已经是我第二次和人民邮电出版社合作翻译技术书籍了。第一次是什么?就是那本豆瓣评分高达8.0的《七周七语言》!

没错,就是这本让很多程序员大呼过瘾的语言大乱斗。那次我和其他几位未曾谋过面的译者一起,在杨海玲和李松峰编辑老师的指导下完成了翻译。说实话,那次经历给了我不少信心,也让我爱上了这种通过翻译学习新知识的感觉。

这次,我带了“一个团队”来翻译

这一次翻译《Go语言编程指南》,可就不一样了。我们睿驰车联网先行产品团队的一群Gopher集体出动!想想看,一群平时用Go撸产品的工程师聚在一起翻译Go的书,那场面,简直是Gopher的狂欢啊!

我们的翻译天团是这样的:

  • 我,白明:虽然是领队,但也得撸起袖子干活,包揽了第1~3章的翻译,还得负责全书的校对。累?不存在的!
  • 刘瑞强:专攻第4、8、11和13章,简直是四处开花。
  • 于昊:包下了第7、10、12、14章,都是难啃的骨头儿!
  • 郭宇:负责第5、6、9章,还有本书其他的零零碎碎,简直是全能选手。

说真的,这次翻译不仅让我们的英语水平突飞猛进,我们对Go的理解也是噌噌往上涨。现在我们用Go开发的车联网中间件,已经在好几家主机厂的项目中大显身手了。这感觉,就像是用Go写出的程序一样:高效又实用!

这本书到底讲了啥?

哦,差点忘了介绍这本书的内容。《Go语言编程指南》可不是一本普通的入门书,它源自作者马克·贝茨和科瑞·拉诺的Gopher Guides系列Go培训教程

这俩哥们教授该课程很多年,深受广大Gopher欢迎。 同时,这本书也是Go语言的全家桶!从最基础的语法到并发编程的高级主题,再到刚刚落地Go没多久的语言特性新贵“泛型”等,应有尽有。无论你是Go语言的新手,还是想进阶的老手,这本书都能让你有所收获。

再具体一点,书中包括了:

  • Go的包和模块管理:不用再为GOPATH抓狂了!
  • 基础语法:变量、类型、控制流,麻雀虽小五脏俱全。
  • 复合类型:数组、切片、map和函数,Go的精髓都在这儿了。
  • 结构体和方法:面向对象?Go有自己的方式。
  • 测试:写出好代码,测试必不可少。
  • 接口和泛型:Go的泛型来了,你还不学吗?
  • 并发编程:goroutine、channel,Go的杀手锏!

是不是很想一睹为快啊!赶紧去下单吧!

翻译路上的酸甜苦辣

说实话,这一年半的翻译时光,还真是既有苦也有乐。有时候为了一个术语的翻译,我们能在群里讨论半天。但最后得出的结果,总是让人满意的。我们不仅仅是翻译,更像是在重新咀嚼消化这本书的内容。遇到原文表述不清的地方,我们还得集体讨论,然后用更清晰的方式表达出来。遇到原文中有误的地方,我们会用脚注标记处原作中的小瑕疵,并对原文予以纠正。

最让我感动的是,看到团队成员们在翻译过程中的成长。大家不仅英语水平提高了,对Go的理解也更深了。现在讨论起Go的特性,大家都能侃侃而谈,这感觉,真是太棒了!

最后的碎碎念

说到最后,真的要感谢人民邮电出版社的杨绣国老师。杨老师的专业水平和敬业精神依旧让我佩服不已。没有她的策划、协调和帮助,这本书可能还在我们的电脑里躺着呢。

当然,我还要向书籍的原作者马克·贝茨和科瑞·拉诺致敬。哥们儿,你们写的书真是太棒了!

最后,如果你正在看这篇文章,而且对Go感兴趣,不如去买本《Go语言编程指南》看看?相信我,你这钱“买不了吃亏,买不了上当,真正的物有所值”。也许有一天,你也会成为Go语言的高手,到时候别忘了回来在留言区告诉我哦!

好了,我得去写Go代码了。记住,Stay hungry,stay foolish and keep Go-ing

最后最后,我再模式化的补一句:因团队能力有限,翻译可能存在不当之处,恳请读者批评指正

注:如发现原文或译文中的问题,欢迎在这篇文章的评论中留言指出。


Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

img{512x368}
img{512x368}

img{512x368}
img{512x368}

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) – https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx
  • 微博2:https://weibo.com/u/6484441286
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • Gopher Daily归档 – https://github.com/bigwhite/gopherdaily

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

2024年的Rust与Go[译]

本文永久链接 – https://tonybai.com/2024/01/24/rust-vs-go-in-2024

本文译自《Rust vs Go in 2024》


我可以说些什么而不让大家生气吗?

Rust和Go哪个更好?你应该为下一个项目选择哪种语言,为什么?两者在性能、简单性、安全性、功能特性、规模化(scale)和并发性等方面如何比较?它们有什么共同点,又有什么根本区别?让我们通过Rust和Go的友好且公平的比较来找到答案。

1. Rust和Go都很棒

首先,非常重要的是,Go和Rust都是绝对优秀的编程语言。它们现代、强大、被广泛采用,并提供卓越的性能。

Rust是一种低级静态类型多范式编程语言,专注于安全性和性能 — Gints Dreimanis

然而:

Go是一种开源编程语言,可以轻松构建简单、可靠且高效的软件 — golang.org

在本文中,我将尝试简要概述我认为的哪种场景下Go是理想的选择,以及哪种场景下Rust可能是更好的选择。

2. 相似之处

两种语言的共同目标是什么?

2.1 内存安全

从历史来看,软件错误和安全漏洞的最大原因之一是不安全或不正确地访问内存。

Rust和Go以不同的方式处理这个问题,但两者的目标都是比其他语言在管理内存方面更智能、更安全。

2.2 快速、紧凑的可执行文件

它们都是编译语言,这意味着你的程序将被直接编译为可执行的机器代码,以便你可以将程序部署为单个二进制文件。与Python或Ruby等解释语言相比,这也使得Rust和Go程序拥有极快的执行速度。

2.3 通用语言

Rust和Go都是功能强大、可扩展的通用编程语言,你可以使用它们来开发各种现代软件。两者都拥有优秀的标准库和蓬勃发展的第三方生态系统,以及强大的商业支持和庞大的用户群。

2.4 务实的编程风格

虽然Go和Rust都具有与函数式和面向对象编程 (OOP) 相关的功能特性,但它们都是实用语言(pragmatic languages),旨在以最合适的方式解决问题。

2.5 适于规模化的开发

Rust和Go都有一些有用的功能特性,使它们适合大规模编程,无论是大型团队,还是大型代码库,或两者兼而有之。

例如,Rust和Go都使用标准代码格式化工具(Go的gofmt,Rust的rustfmt),这结束了关于括号放置位置的无用争论。

两者还具有优秀的内置高性能标准构建和依赖管理工具;不再需要与复杂的第三方构建系统搏斗,也不必每隔几年学习一个新系统。

3. 差异

虽然Rust和Go有很多共同点,但在某些领域,理性的人可能会更喜欢一种语言而不是另一种语言,以满足项目的特定需求。

3.1 性能

Go和Rust都非常快。然而,Go的设计更有利于快速编译,而Rust则是针对快速执行进行了优化。

Rust的运行时性能也更加一致,因为它不使用垃圾回收机制。另一方面,Go的垃圾回收器减轻了程序员的一些负担,使其更容易专注于解决主要问题,而不是内存管理的细节。

对于执行速度胜过所有其他考虑因素的领域(例如游戏编程、操作系统内核、Web浏览器组件和实时控制系统),Rust是更好的选择。

3.2 简单

从设计上来说,Go是一种小型语言:它的语法、关键字和语言结构都非常少。你可以快速学习Go的基础知识并使用该语言提升工作效率。

这使得Go在时间跨度短的项目中或需要快速引入大量新程序员的团队中具有优势,尤其是在他们相对缺乏经验的情况下。

3.3 功能特性

另一方面,Rust几乎拥有你能想象到的编程语言的所有功能特性,还有一些你可能无法想象的功能特性。这使得它成为一种强大且富有表现力的语言,可以通过多种不同的方式来完成同一件事。

如果你是从其他语言过渡到Rust的,你可能可以找到你习惯的大多数功能的Rust等效项。当大型项目需要从C++或Java等传统语言迁移时,这给Rust带来了优势。

3.4 并发

与大多数语言不同,Go语言的设计内置了对并发编程的支持,例如 goroutine(线程的轻量级版本)和通道(在并发任务之间通信数据的安全有效的方法)。

这些使得Go成为网络服务器和微服务等大规模并发应用程序的完美选择。

3.5 安全

Rust经过精心设计,以确保程序员无法做一些他们不想做的不安全的事情,例如覆盖共享变量。编译器要求你明确在程序的不同部分之间共享数据的方式,并且可以检测许多常见的错误和bug。

因此,所谓的“与借用检查器(borrow checker)战斗”是新Rust程序员的常见抱怨。用安全的Rust代码实现程序通常意味着从根本上重新思考其设计,这可能会令人沮丧,但当可靠性是你的首要任务时,这样做的好处是值得的。

3.6 规模化(scale)

Go旨在让你轻松扩展项目和开发团队。它的极简设计带来了一定的一致性,并且明确定义的标准风格的存在意味着任何Go程序员都可以相对快速地阅读和理解新的代码库。

当谈到大型软件开发时,清晰胜于聪明。对于大型组织,尤其是许多分布式团队来说,Go是一个不错的选择。其快速构建时间也有利于快速测试和部署。

4. 权衡取舍

Rust和Go的设计团队做出了一些截然不同的选择,所以让我们看看这些权衡取舍使这两种语言彼此截然不同的一些领域。

4.1 垃圾回收

一般来说,具有垃圾回收和自动内存管理功能的语言(如Go)可以快速轻松地开发可靠、高效的程序,对于某些人来说这是最重要的。

但是垃圾回收由于其性能开销和停止世界(Stop-The-World)的暂停,可能会使程序在运行时的行为变得不可预测,有些人发现这种不一致是不可接受的。

程序员必须明确负责分配和释放每个字节内存的语言(例如Rust)更适合实时或超高性能应用程序。

4.2 抽象

计算机编程的历史是一个日益复杂的抽象的故事,它让程序员可以解决问题,而不必过多担心底层机器的实际工作方式。

这使得程序更容易编写并且可能更可移植。但对于许多程序来说,访问硬件以及精确控制程序的执行方式更为重要。

Rust的目标是让程序员“更接近金属”,拥有更多的控制权,而Go抽象了架构细节,让程序员更接近问题。

4.3 速度

Rust进行了许多设计权衡,以实现最佳的执行速度。相比之下,Go更关心简单性,并且愿意为此牺牲一些(运行时)性能。

在这一点上你是喜欢Rust还是Go取决于你是愿意花更多的时间等待程序构建,还是等待程序运行。

4.4 正确性

Go和Rust都旨在帮助你编写正确的程序,但方式不同:例如,Go提供了出色的内置单元测试框架和丰富的标准库,而Rust则专注于利用其借用检查机制(borrow checker)消除运行时错误。

公平地说,用Go编写给定的程序更容易,但结果可能比Rust版本更容易包含错误。Rust对程序员施加了纪律约束,但Go让程序员选择他们想要对特定项目采取的纪律程度。

5. 结论

我希望这篇文章能让你相信Rust和Go都值得你认真考虑。你应该拒绝这种错误的困境:你只能学习其中之一。事实上,你了解的语言越多,你作为软件开发人员的价值就越高。

你学习的每一种新语言都会给你思考问题的新方法,这只能是一件好事。任何软件项目的质量和成功最重要的因素不是语言的选择,而是程序员的技能。

当使用最适合你的语言时,你变得最熟练,并且你也能享受到最多的编程带给你的乐趣。因此,如果问题是“我应该学习Rust或Go吗?”,唯一正确的答案是“是的”。

– John Arundel


Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

img{512x368}
img{512x368}

img{512x368}
img{512x368}

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) – https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx
  • 微博2:https://weibo.com/u/6484441286
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • Gopher Daily归档 – https://github.com/bigwhite/gopherdaily

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats