這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
這篇文章雖然不長,但是很有趣。看到好幾天了,一直都沒空翻譯。抽空翻譯出來,這應當算是英文“標題黨”和“進階黑”吧。
原文不好讀,也沒什麼特別的;不過如果是為了強化學習 Golang 的信心,值得看看。
原文在此:http://aeronotix.pl/blog/go-is-boring
—————-翻譯分隔線—————-
無聊的 Golang
Go 沒什麼新鮮的,也沒什麼特別的。你在看到 Go 之前都遇到過了。是的,我也是這麼認為的。不過你所沒見過的是所有這些都集中在一個語言中,產生了一個 TMD 超級有用的核心。
你之前已經用過 channel 了,很酷吧。純粹為了獲得那麼一點點的效能提升就用在各個地方,並且期望能夠在新語言中整合。你精通線程、攜程、actor、future 和 promise。你叫起來、走起來、說起話來都像個鴨子(譯註:鴨子類型)。但是你(可能)從未將這些事情放在一起。而這就是 Go。Go 全部是關於我們已經深入瞭解的那些東西,參和參合在一起。Go 試圖消除語言中糟糕的那部分東西,或著或者移除主要的部分(或者至少嘗試提供更好的選擇)。
當發揮靜態類型優勢的同時,也可能寫出該死的冗長代碼。你需要為編譯器設定每個變數的類型,辛勤的(向電腦)解釋每個部分最終接受和返回什麼。這真是令人厭惡,而且完全可以避免。通過 literal 文法或者函數建立各種基本類型,或其他特殊的文法。那麼為什麼我們還需要使用特殊的文法來告訴編譯器使用什麼類型來建立?不需要。類型推斷。Go 有一個類型推斷符號(:=)可以在編譯時間推匯出類型,從而節約你寶貴的擊鍵次數。這不是什麼新玩意兒,一大堆語言可以做到。
有用且輕量的物件導向編程。有一大堆 C++ 樣式的語言使得類看起來像是編程中最終的王者。所有的類型必須巧妙的進行分類和擺放,以便建立一個分類學集錦,一個你代碼中所有工作的對象的分類學博物館。這是提供給普通操作的愚蠢的盛大儀式所需要的東西…必須要做的東西。名詞是東西,名詞調用動詞。就是這麼簡單。編程形式上也不應當有特殊的東西。這帶來了確定的好處。它在同一個資料上封裝了若干操作是很好的(動詞作用在名詞上),這有著不錯的語義上的用途(x 是一個 y)但這不是任何地方都能用到。地獄啊,我已經寫過許多 web 後端的東西,不過我已經沒有寫過 Python 的類大概有…3 個月了。許多語言都對 OOP 做了讓步,這“只是另一個範式”,這是對的。這沒什麼新鮮的。
並發是一等公民。這是個壯舉。我不再需要找遍整個標準庫僅僅是為了找到一個不是那麼符合要求的,古老的,吱吱嘎嘎作響的模型。我也不需要使用像線程、join 和其他混亂的煩人東西,用同樣乏味的方法讓程式並發。Go 就運行就是了。我請求一個並發的常式,就獲得一個該死的並發常式。這使得像我這樣低級的程式員也能使用並發。這沒什麼新鮮的。
我想我的觀點是,Go 看起來沒什麼新鮮的。看起來可以在其他任何地方獲得這些特性,而無需學習一門全新的語言。你無法同時獲得它們。至少這是語言中的 DNA。