解讀 2018之Go語言篇(下):明年有哪些值得翹首期盼?

年接近尾聲,InfoQ 策劃了“解讀 2018”年終技術盤點系列文章,希望能夠給讀者清晰地梳理出重要技術領域在這一年來的發展和變化。本篇文章是Go語言2018年終盤點的下篇,上篇對2018年Go語言的技術發展現狀進行了回顧和盤點,本篇是對明年可能的發展情況進行的預測和展望。

筆者相信,真正的Go語言愛好者們在每一年都會對這門編程語言有所期待。這些期待有的可能是針對某項改進的,有的可能是針對某個特性的。不論怎樣,我們都希望這門編程語言能越來越強大,同時也越來越符合自己的口味。不過,正所謂衆口難調,我們也不必去糾結那些細枝末節。只要她能向着更優秀的方向發展,並能夠產生好的結果可以了。沒錯,我說的就是早已埋下伏筆但在今年才爆發的正牌依賴管理工具之爭。最後還是vgo獲勝了,筆者覺得這也是必然的。

好了,這些風波和八卦我們暫且不提。接下來,我會向你提供一些Go語言在未來發展的線索,有短期的也有長期的。不知道你怎麼看,反正我個人對這些進展都是翹首期盼的。(如果大家還希望瞭解更多詳情,還可以看下筆者在極客時間的Go語言專欄

Go 1.12

筆者首先盼望的肯定是Go語言依賴管理機制的第一個穩定版,並且相信很多Go語言愛好者都是如此。但是,在筆者看來,這個穩定版本並不一定就會在Go語言的1.12版本中發佈,雖然目標是這樣的。

正如前文所述,Go 1.12會從godoc命令中去掉命令行接口,而只保留基於Web的圖形化查詢界面。同時,它也不再允許開發者通過GOCACHE環境變量去禁用構建結果緩存。當然了,這個版本也會包含大量針對標準庫的改進,詳細內容可以到此版本的發佈說明草稿中查看。

Go 2

在去年我們就說過,Go語言官方已經把Go 2的計劃鄭重地擺上了桌面。今年的進展是,Go 2的設計草案已經發布了。

Go 語言作者之一 Robert Griesemer 不久前剛剛在官方博客發文稱,Go 2 已經選擇出備選新特性提案,進入提案反饋階段,他呼籲社區積極參與進來,和官方團隊一起改進 Go 語言設計。具體詳情可以看InfoQ的報道《Go 2 提上日程,官方團隊呼籲社區給新特性提案提交反饋》

目前來看,Go 2將會主要解決三個問題,即:錯誤處理、錯誤值以及對泛型自定義的支持。

從多年前開始,很多Go程序開發者就已經在抱怨Go語言在錯誤處理方面的醜陋了。Go函數的多返回值使我們可以在返回一般結果值的同時攜帶錯誤值。這是一個很亮眼的特性,可以讓我們重視錯誤,並總是進行明確的處理。不過,這也帶來了一個問題。我們在調用這樣的Go函數之後,不得不先用if語句檢查錯誤值是否爲nil,然後才能進行下一步處理。如果在我們的程序中有很多這樣的代碼,那麼顯然是很醜陋的。

不過,筆者認爲,這很多都是開發者在程序設計方面存在問題導致的。然而,我們也並不能否認,Go語言的這種錯誤處理方式是很多程序變得醜陋的導火索。不論怎樣,Go語言官方已經開始正視這個問題並在着手解決了。

與之相關的一個問題就是錯誤值的設計。我們知道,只要實現了error接口的數據類型就都可以被稱爲錯誤類型,它們的值就可以被稱爲錯誤值。創造一個錯誤值的方式有很多,調用errors.New函數、調用fmt.Errorf函數,以及使用值的字面量,等等。這恰恰使我們在對錯誤種類做判斷的時候不得不仔細地選擇判斷方式,是檢查錯誤值的類型?還是判斷它是否等於某個已存在的錯誤值?又或者是對錯誤描述進行匹配?這顯然增加了錯誤處理的成本。從草案上來看,已經有一些顯著的成果了,我們還是拭目以待吧。

關於泛型,筆者並不想多說。允許泛型的自定義顯然可以增強編程語言的表達能力,並且在一些場景下可以顯著地減少重複的代碼。不過,怎樣將它設計好,並用優雅的方式展現出來,是一個很複雜的問題。在相應的草案中,Go語言官方給出了一個看起來還不錯的方案,但是依然可能存在變數。希望官方能夠參考C++、Java、Rust、Swift等編程語言的設計,取其精華、去其糟粕吧。

關於詳細的Go 2設計草案,大家可以到這裏查閱。

社區與環境

筆者在今年明顯的感覺到,關注Go語言的各路人馬又變多了。這體現在了幾個方面。首先,以Go語言爲主題的meetup明顯增多。無論是哪個技術組織發起的,參與的人都不在少數。而且,這樣的meetup已經在更多的一、二線城市中出現了。

其次,互聯網上的Go語言中文資料(比如博客、教程、電子書等)也明顯增多,不論是免費的還是收費的,雖然水平各不相同,但是顯然大家都在進行積極的探索和分享。

最後,很多主打技術培訓的公司和組織都已經對Go語言進行了重點的關注,並開發出了自己的培訓產品或服務,包括線上的知識付費產品、線下的面授課程,以及目標各有不同的開源項目,等等。筆者也有幸參與其中,並在極客時間開設了專欄《Go語言核心36講》。

不過,隨着Go語言逐漸得到各方的廣泛關注,盜版和抄襲也日益猖獗。筆者在這裏呼籲,希望大家能夠尊重原創作者的辛勤勞動和知識產權,拒絕盜版、抵制抄襲!只有這樣才能夠讓作者們更加積極地產出優秀的內容,我們的學習環境才能更美好,技術社區才能因此向着健康、壯大的方向發展。

以上,就是我對Go語言在2018年發展的簡要回顧和對其未來發展的展望。希望能夠藉此促使大家對Go語言和我們國內的技術社區有更多的關注。

參考文獻

[1] Go 1.10 is released: https://blog.golang.org/go1.10
[2] Go 1.11 is released: https://blog.golang.org/go1.11
[3] Diagnostics: https://golang.google.cn/doc/diagnostics.html
[4] WebAssembly: https://github.com/golang/go/wiki/WebAssembly
[5] Modules: https://github.com/golang/go/wiki/Modules
[6] Go 1.12 Release Notes(DRAFT): https://tip.golang.org/doc/go1.12
[7] Nine years of Go: https://blog.golang.org/9years
[8] Toward Go 2: https://blog.golang.org/toward-go2
[9] Go 2 Draft Designs: https://go.googlesource.com/proposal/+/master/design/go2draft.md

延伸閱讀:


作者簡介
郝林,國內知名的Go語言技術佈道者,GoHackers技術社羣的發起人和組織者。他也是極客時間專欄《Go語言核心36講》的作者,以及圖靈原創圖書《Go併發編程實戰》的作者。他曾在輕鬆籌任大數據負責人,同時負責大數據部門和主站的後端技術團隊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章