使用 Go 语言的三个原因

几个星期前,我一个朋友问我:“为什么要关心 Go 语言”? 因为他们知道我热衷于 Go 语言,但他们想知道为什么我认为 其他人 也应该关心。本文包含三个我认为 Go 是重要的编程语言的原因。

安全 个人而言,你和我或许完全有能力在 C 中编写程序,既不会泄漏内存,也不会不安全地重复使用内存。然而,整体上,即使有超过40年的经验,用 C 的程序员也无法可靠地这样做。

尽管静态代码分析、valgrind、tsan 以及 “-Werror” 已经存在了几十年,却很少有证据表明这些工具被广泛认可,更不用说广泛采用。总而言之,事实表明,程序员根本无法安全地管理自己的内存。现在是离开 C 的时候了。

Go 不需要程序员直接管理内存,所有内存分配都由语言运行时自行管理,使用前初始化,必要时检查边界。它肯定不是提供这些安全保障的第一个主流语言,Java(1995)可能是该冠军的竞争者。关键是,世界对不安全的编程语言没有胃口,所以人们默认认为,Go 是内存安全的。

(adsbygoogle = window.adsbygoogle || []).push({});

开发人员生产力 从 20 世纪 70 年代末,开发人员的时间变得比硬件所耗费的时间更昂贵了。开发人员的生产力是一个不断扩展的话题,但它归结为这一点:你花了多少时间做有用的工作,又有多少时间等待编译器或者失望地迷失在外部代码库中。

有个笑话说 Go 是在等待 C ++ 程序编译 时开发的。快速编译是 Go 的一个重要功能,也是吸引新开发人员的关键工具。虽然编译速度仍然是一个 永久的战场 ,但公平地说,在其他语言中需要几分钟的编译,在 Go 中只需要几秒钟。

Go 程序员意识到生产力的更根本的问题是代码是 为了读而写的 ,所以将 代码的阅读行为放在编写之上 。Go 通过工具和自定义来强制所有代码格式化成特定的样式。这消除了学习项目特定语言的方言时的困难,并有助于发现错误,因为它们 看上去 就是不正确。

由于专注于分析和机器辅助,Go 开发人员开始采用越来越多的工具来发现常见的编码错误,这种工具从来没有在 C 语言开发者中产生共鸣 – Go 开发人员 希望 工具帮助他们保持代码清洁。

并发性 十多年来,芯片设计师一直在警告 免费午餐将会结束 。从最低端的手机到最耗电的服务器,硬件的并行性以 更多、更慢、堆砌 cpu 内核 的形式出现,但只有 你的语言可以利用它们才有意义。因此,并发特性需要内置到我们编写的要在今天的硬件上运行的软件中。

通过提供一种基于协程的 轻量级并发模型 ,或者是 Go 中已知的 goroutines,Go 超越了那些暴露操作系统的多进程或多线程并行模型的语言。goroutines 允许程序员避开复杂的回调,而语言运行时确保有足够的线程来保持你的内核的活跃。

总结 我给朋友推荐 Go 有三个原因:安全性、生产力和并发性。有些语言可以涵盖一个也有可能是两个方面,但是这三个方面的结合使得 Go 成为主流程序员的绝佳选择。


原文: https://dave.cheney.net/2017/03/20/why-go

作者:Dave Cheney 译者:geekpi 校对:jasminepeng

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

从“悲剧”的几个运维场景谈谈运维开发的痛点

我在这个事情上栽了很多的跟头,而且会发现事情变得越来越不可控。就好比我的期望是6,达到的结果是2,反差越大,发现改进的空间很大,以至于我会陷入一个死循环,我会想...

13720
来自专栏程序员叨叨叨

4.1 开始 Cg 之旅第 4 章 Cg 语言概述

Cg(C for Graphcis)语言,是 NVIDIA 与 Microsoft 合作研发,旨在为开发人员提供一套方便、跨平台(良好的兼容性),控制可编程图形...

12930
来自专栏雨尘分享

An AVPlayerItem cannot be associated with more than one instance of AVPlayer 你困扰了我这么久

27840
来自专栏杨建荣的学习笔记

运维平台中的业务树初版设计

资源服务的一个基本单元是服务器,可以是虚拟机,物理机,也可以是docker等。这是最底层的资源服务。

25030
来自专栏个人分享

大数据理论体系总结--数据仓库管理与全链路数据体系

  就这样,大数据领域蓬勃发展了好几年,有很多伙伴执迷于技术,成为了分布式计算与存储的领域专家。也有很多伙伴执迷于数据,成为了行业的数据研发专家。当然还有很多小...

51040
来自专栏一个会写诗的程序员的博客

测试思考拾叶集测试万能公式自动化测试自动化测试分层自动化测试框架工具平台数据准备服务Bug

须理清“SUT的功能”,“SUT的所有输入”,“每一个输入的取值范围”,“SUT的所有输出”,“根据功能推出每一个输出的预期值”。

12540
来自专栏媒矿工厂

视频传输延迟分析及解决方案:CMAF、LHLS

使用在线流媒体平台做直播时,实时体验至关重要:看世界杯时,您还边正在聚精会神地盯着C罗的金刚腿等着罚球,隔壁老王就传出进球欢呼声,您肯定无比郁闷。视频播放领域的...

4K50
来自专栏java思维导图

微服务开发中的数据架构设计

微服务是当前非常流行的技术框架,通过服务的小型化、原子化以及分布式架构的弹性伸缩和高可用性,可以实现业务之间的松耦合、业务的灵活调整组合以及系统的高可用性。为业...

28820
来自专栏Dawnzhang的开发者手册

软件测试学习笔记-概念篇(一)

  每个系统的成型,上线都离不开测试,这段时间陆陆续续的学习测试,在这里总结一番;作为学习交流之用;

20120
来自专栏WeTest质量开放平台团队的专栏

多 “维” 优化:前端高并发策略的更深层思考

本文笔者从前端高并发优化这一具体点出发,逐步向大家阐述笔者在优化的“术”之上思维层面的一些思考。希望能给各位带来共鸣和感悟。

50110

扫码关注云+社区

领取腾讯云代金券