谷歌员工无法理解一种出色的语言,但我们希望用它们来构建优秀的软件。因此,我们提供的语言必须易于理解和使用。

——谷歌最著名的软件工程师之一Rob Pike

作者 | Alexei Matyushkin
译者 | 安翔
责编 | 屠敏
出品 | CSDN(ID:CSDNnews)

我曾多次尝试使用 Go 语言。毕竟,它由大名鼎鼎的 Rob Pike 创建,Rob Pike 曾设计过如 Plan9 和 Inferno) 操作系统以及 Limbo 编程语言,这些操作系统和编程语言都得到了广泛的使用并取得了巨大的成功。Go 有谷歌的强力支持,那么它就不会失败了吗?

答案是否定的。到目前为止,Go 是二十一世纪计算机科学领域最大的骗局。谷歌曾经背弃了其“Don’t be evil””的座右铭,尽管证据确凿,但是出于某种原因,人们仍然非常信任谷歌。

有人说,Go 是由谷歌创造的,那么一定不会失败。

我想说的是,Go 是一个现代科技公司的欺诈行为,我解释我的看法。

我将通过官方 Golang 书籍来展示其错误和设计缺陷。

你的第一个 Go 程序

本教程从程序结构的解释开始。

第一行如下:

package main

大家都习惯称之为模块,Go 为了凸显自己的特别,将其称之为包。

接下来的代码是:

import "fmt"

import "fmt"?开玩笑吧,这在编译型语言中完全是多余的。优秀的编译器可以很容易地解决所有调用 fmt.foo 并执行所需的任何导入。显式导入可能有用的唯一原因是从将函数 import(导入) 到包。

类型

Go 是一种静态类型的编程语言。这意味着变量始终具有特定类型,并且该类型不会更改。

这完全是谎言(我个人观点)。静态类型语言类型丰富,如 Haskell,需要一个巨大的样板才能完成非常简单的任务,而且 Go 宣称自己 easy-come-easy-go。这就是为什么除非另有说明,否则它实际上是静态类型的。我们稍后讨论 void 接口。

Go 的整数类型有:uint8、uint16、uint32、uint64、int8、int16、int32 和 int64。

在二十一世纪的第二个十年,我们通过编译的“静态类型”的语言让开发人员区分 int32 和 int64。

变量

尽管创建具有起始值的新变量非常常见,但是 Go 的语句比常见的方式更短:

x := "Hello World"

一个普通的冒号+等号会出现什么问题呢?我们会失去 Go 所引以为傲的静态类型,该语法非常冗余和奇怪。

package mainimport "fmt"var x string = "Hello World"func main() {  fmt.Println(x)}

请注意,我们将变量移到 main 函数之外。这意味着其他函数也可以访问此变量。

该内容可以在范围一章中找到。好吧,它看起来像 Ruby 中的变量。或者作为Elixir 中的模块属性。这个变量的范围和生命周期到底是什么?我可以从这个模块中声明的函数返回它吗?教程中没有明确说明。

控制结构

Go 引入的第一个控制结构是 for 循环。减少了迭代和映射吗?不,我们从未听说过。声明一个最外层的变量并使用 for 进行循环。我谨慎地根据我的日历检查当前日期。它仍然是2018年。

第二个控制结构是 if。“给我一个 for 和 if,我便可以撬动地球,” 阿基米德曾经说过。顺便说一句,第三个控制结构是 switch。

所有控制结构就这些!语言必须尽可能简单。

数组、切片和 Maps

数组具有预定义的长度。切片是不固定长度的数组。Maps 是键-值对。Maps 需要声明和初始化,否则会引发运行时错误。

var x map[string]int = make(map[string]int)

以上代码表明创建易读语言的目标已成功实现。

以下是访问 map 中元素的方法。

if name, ok := elements["Un"]; ok {  fmt.Println(name, ok)}

无话可说。我也听到有些人反对其安全性。这完全是所谓的斯德哥尔摩综合症。

我甚至无法想象有多少潜在的开发人员产生了这样的防御。也许不雇用他们会让事情变得简单。

函数

函数可以返回多个值(返回数组有什么问题?),此外,函数可以是可变参数的。到目前为止,这很好。

接口。听起来很吓人? - 并不是全部。Void 接口。

func Println(a ...interface{}) (n int, err error)

静态类型?安全?笑死人。

地狱之路已经铺好了。我相信他们会为傻瓜创造一种安全的静态类型语言。但现实世界是严酷和粗暴的。我们会给异想天开的孩子一些垃圾甜食,而不是健康的绿色蔬菜。

最后

在此,我对这门伟大语言的研究已经结束。我认为,好的代码取决于开发人员,而非计算机编程语言。很多语言设计存在缺陷,但是优秀的程序员用它创造了优秀的程序;有的编程语言很好,但是平庸的程序员用它设计了糟糕的程序。就个人而言,我并不关心用哪种语言来完成任务。

但请不要再称 Go 为安全、易于读写和静态类型的语言。谢谢。

原文:http://rocket-science.ru/hacking/2018/12/25/go-outta-here

本文为 CSDN 翻译,如需转载,请注明来源出处。

 热 文 推 荐 

Python 爬取 6000 篇文章分析 CSDN 是如何进入微信 500 强的

☞ Android 开发工程师自述:毕业两年后,我明白的那些事!

Chrome 新 UI 很“难看”,用户很生气

无业务不技术:那些誓用区块链重塑的行业,发展怎么样了?

☞ 下一次 IT 变革:边缘计算(Edge computing)

☞ 12306 脱库 410 万用户数据究竟从何泄漏?

年度重磅:《AI聚变:2018年优秀AI应用案例TOP 20》正式发布

☞ 老程序员肺腑忠告:千万别一辈子靠技术生存!

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

点击“阅读原文”,打开 CSDN App 阅读更贴心!

喜欢就点击“好看”吧!

背靠 Google 的 Go 语言,就不会失败?相关推荐

  1. 来自 Google 的 R 语言编码风格指南

    来自 Google 的 R 语言编码风格指南 R 语言是一门主要用于统计计算和绘图的高级编程语言. 这份 R 语言编码风格指南旨在让我们的 R 代码更容易阅读.分享和检查. 以下规则系与 Google ...

  2. MURAL:消除预训练模型的语言限制!Google提出跨语言的多模态、多任务检索模型MURAL...

    关注公众号,发现CV技术之美 今日分享论文『MURAL: Multimodal, Multitask Retrieval Across Languages』,由 Google 提出跨语言的多模态.多任 ...

  3. 解决Google Drive 大文件下载过程中中途失败问题

    使用Internet Download Manager的断点续传功能进行下载大文件. 解决Google Drive 大文件下载过程中中途失败问题 - 知乎 (zhihu.com)

  4. C 语言fseek, ftell调用失败(fseek返回非零值,ftell返回-1)

    C 语言fseek. ftell调用失败(fseek返回非零值,ftell返回-1) 太长不看版 fseek调用失败,返回非零值,是因为传入的参数超过了文件尾,或者文件大于2G,需要使用fseek的6 ...

  5. c语言编程文件打不开,c语言fopen打开文件失败的原因是什么?

    c语言fopen打开文件失败的原因是什么? 原因是:程序是以"r"的方式,也就是"读"的方式打开file.txt文件,可是程序都没有指定这个文件在哪里,程序找不 ...

  6. Go语言解决go get失败的问题

    Go语言解决go get失败的问题 文章目录 Go语言解决go get失败的问题 1.临时设置 2.长久生效 3.其他代理 由于墙的原因,GitHub下载最近失败的非常频繁,而且由于go的一些库在官网 ...

  7. 易语言启动欲调试程序失败

    易语言启动欲调试程序失败 问题描述 启动欲调试程序失败,有可能是因为被调试程序需要UAC权限或者其它原因,请以管理员权限启动易语言后重试! 解决方案: 1.先检查易言语静态编译link.ini是否配置 ...

  8. c语言入门经典必背18个程序,c语言入门经典必背18个程序

    c语言入门经典必背18个程序 1 . /* 输出 9*9 口诀.共 9 行 9 列, i 控制行, j 控制列. */ #include "stdio.h" main() {int ...

  9. Google排名第一的语言,引数十万人关注:搞定它,技术大牛都甘拜下风

    毋庸置疑,Python越来越被认可为程序员新时代的风口语言.无论是刚入门的程序员,还是年薪百万的 BATJ 的大牛都无可否认:Python的应用能力是成为一名码农大神的必要项. 所以,很多程序员把Py ...

最新文章

  1. python基本语法的有关知识
  2. VirtualBox安装Ubuntu详细过程
  3. JavaScript(JS)之简单介绍
  4. 视觉平衡与物理平衡_设计中的视觉平衡
  5. java 前后的区别_java中前后++的区别
  6. python-词云wordcloud-0223
  7. Sql UNION 合并多个结果集并排序
  8. crt导出服务器文件,非1元证书怎么提取生成crt文件
  9. 如何保持MacBook电池健康并延长其使用寿命?
  10. mac OSX 上 brew install hive
  11. 深度学习算法-YOLO
  12. Cadence Allegro修改字体粗细图文教程
  13. 【转】Jenkins 构建触发器操作详解
  14. JS实现随机切换姓名与头像
  15. allure报告本地执行,显示趋势图
  16. Error creating bean with name ‘serverEndpointExporter‘ defined in class path resource
  17. docker的目录挂载
  18. 使用代理后,雷鸟连接qq邮箱
  19. 操作系统 FIFO 先进先出页面置换算法
  20. Safari无痕浏览影响localStorage

热门文章

  1. python将数值进行关联_小疯谈python:(三)数据类型之数值类型
  2. leetcode python3 简单题100. Same Tree
  3. CMake笔记3构建复杂项目
  4. Flutter基础—布局模型之水平垂直
  5. 中国水性植绒胶行业市场供需与战略研究报告
  6. 中国晶体谐振器行业市场供需与战略研究报告
  7. 2021-2025年中国乘用车稳定杆行业市场供需与战略研究报告
  8. python导入模块的方式错误的是,导入模块时的错误处理
  9. Unix网络编程卷一第三章笔记
  10. 老程序员也搞不定的 4 个巨坑!