首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

背靠 Google 的 Go 语言,就不会失败?

  • 24-03-05 02:01
  • 2429
  • 9379
blog.csdn.net

640?wx_fmt=gif

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

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

640?wx_fmt=jpeg

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

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

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

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

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

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


640?wx_fmt=png

你的第一个 Go 程序


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

第一行如下:

package main

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

接下来的代码是:

import "fmt"

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


640?wx_fmt=png

类型


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

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

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

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


640?wx_fmt=png

变量


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

x := "Hello World"

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

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

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

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


640?wx_fmt=png

控制结构


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

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

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


640?wx_fmt=png

数组、切片和 Maps


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

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

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

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

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

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

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


640?wx_fmt=png

函数


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

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

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

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

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


640?wx_fmt=png

最后


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

但请不要再称 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 "点个好看吧!"

640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!

640?wx_fmt=png 喜欢就点击“好看”吧!
CSDN
微信公众号
成就一亿技术人
注:本文转载自blog.csdn.net的CSDN资讯的文章"https://blog.csdn.net/csdnnews/article/details/85503170"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top