背靠 Google 的 Go 語言,就不會失敗?

谷歌員工無法理解一種出色的語言,但我們希望用它們來構建優秀的軟件。因此,我們提供的語言必須易於理解和使用。

——谷歌最著名的軟件工程師之一Rob Pike

背靠 Google 的 Go 語言,就不會失敗?

作者 | 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 main
import "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 翻譯,如需轉載,請註明來源出處。


分享到:


相關文章: