【十問十答】對話Go語言開發團隊
Go是谷歌推出的一門程式語言。熟悉Go語言的開發者都知道其彌補了C語言的不足並且保持了C的極簡主義。使用Go編譯的程式可以媲美C或C++程式碼的速度,而且更加安全、支援並行程式(使用Go語言的12個理由)。一些主流的專案包括Docker、Heroku's Force.com以及Cloud Foundry's (Go)Router都是基於Go語言編寫而來。有人說,Go為雲而生,也正是由於其擁有併發性的作業系統以及完美的架構,使其備受開發者的青睞。
本月10日在巴黎舉行的dotGo會議最後一個環節,是對Go語言開發團隊(包括memcached開發者Brad Fitzpatrick)的問答。本文譯自Sourcegraph的同學的現場記錄,讓我們一起來聆聽大神們怎麼看Go語言吧。
譯文如下:
Go語言開發團隊成員:Francesc Campoy Flores、Andrew Gerrand、Brad Fitzpatrick、Dave Cheney、Keith Rarick及Blake Mizerany
Q1:在任何程式語言中都會出現反模式(譯註:指應該避免的錯誤用法),尤其是新語言,人們還在學習該使用和複用哪些語言特性。你們在Go語言中看到了哪些反模式,正確的做法是什麼?
Dave Cheney:我覺得是包,現在的包實在是太多了。包的粒度應該是一個比較完整和具體的概念,比如HTTP包合適,而HTTP Client就不合適。
Utility包沒問題,但名字不應該只是叫“utils”。
Q2:坊間有不少第三方的依賴管理工具,如:godep,gpm等。未來Go的核心會提供這種功能嗎?
Brad Fitzpatrick:我們不想來定義遊戲規則,話語權應交給社群,讓它們自由競爭,產生勝者。受歡迎的產品穩定幾年之後,我們才會考慮納入語言核心。另外,我們之所以不太操心依賴管理,是因為在Google內部我們不用這些工具。
Andrew Gerrand:語言核心中沒有版本管理能促使庫的作者們提供好的、穩定的API。約定是包API改變時,只改變匯入路徑。
Q3:Go語言在Unix環境下的伺服器端程式設計表現不俗。接下來,人們會不會嘗試使用Go來進行桌面和嵌入式應用的編寫?
Dave Cheney:我樂於看到Go能在小的ARM處理器上有所表現。我們需要讓編譯器能針對不同的ARM生成相應的程式碼,這還比較簡單。另外,垃圾回收語言需要更多記憶體,但這也是可以解決的問題。
Brad Fitzpatrick:已經有人用Go編寫GUI庫了。
Q4:Go語言在對Android支援方面有什麼新進展嗎?
Andrew Gerrand:當然有!Google紐約辦公室的David Crawshaw正在做這方面工作。他有幾個讓Go在Android上執行的辦法:1)通過NDK,遊戲應用可以訪問畫布、觸控事件、聲音等;2)使用Java與Go相結合的辦法。
Q5:你認為Go語言的垃圾回收器已經適合用於產品環境的長時間執行、低延遲處理了嗎?
Brad Fitzpatrick:沒問題啊,只要你仔細處理垃圾。我們已嘗試重構dl.google.com,產生更少的垃圾,延遲非常小。現在Google內部只剩一個客戶的實時需求Go垃圾回收器還無法滿足。
Q6:類似dlopen的動態載入程式碼有什麼新進展嗎?
Andrew Gerrand: 可以先看看Lance Taylor最近寫的關於Go語言執行模式的文件:Go程式碼可以在哪些不同上下文中執行。這些模式的實現都在計劃之中,但何時完成誰來完成,具體還沒有時間表,文件可以說是第一步吧。
Brad Fitzpatrick:我想在聯結器用Go重寫之前都沒時間做。
Q7:因為沒有機制引用其他goroutine,實現supervision tree和銷燬goroutine執行緒都需要手工操作。這些未來會解決嗎,哪些是通過庫來支援,哪些會通過修改語言?
Dave Cheney:在今年的GopherCon 會議上,有一種強烈的感覺,設計即使崩潰也能安全恢復的健壯應用是程式設計師的天職。指望系統層面花費投入精力就能坐收百分百可靠性,是靠不住的。
Andrew Gerrand: 我覺得你應該反過來想想,即使Go語言把這些都實現了又能怎麼樣呢?整個程式崩潰,清理處理器沒法呼叫時,你還不是得自己處理?
Q8:堆壓縮在路線圖上嗎?還是要等到在2.0版本大改?
Brad Fitzpatrick:這個在路線圖上。(Brad自己在此次會議的演講中說,Go 2.0還根本沒影呢)
Q9:Go語言在新特性開發上好像較保守,不願意增加新特性,這是有意為之嗎?
Dave Cheney:是的,這正是Go的特色之一。
Andrew Gerrand:Go的設計當初只需要三名成員達成共識就行。現在成員多多了,所謂眾口難調,共識更難達成。(半開玩笑的口氣)小痛點不值得改,而大痛點需要大改,又很難hold住。Go 1.x總體已經定型了,我不認為增加泛型能突然讓大家都滿意。
Brad Fitzpatrick:記住,標準委員會永遠不會刪掉任何東西。
Q10:大公司對選擇新語言顯得更為慎重,對於說服他們來使用Go語言有什麼建議嗎?
Dave Cheney:Go語言進入某個公司,往往是因為能解決具體問題,而不是來自上層的命令。這是最好的推廣語:“它能幫我解決問題。”
Andrew Gerrand:我必須指出,現在使用Go語言的大公司很多,包括蘋果、Comcast、Facebook等等。更長列表參見這裡。
英文出自:dotGo
相關文章
- 社群問答精選|ChatGPT for SegmentFault 十問十答ChatGPT
- 總結 | 動態規劃十問十答動態規劃
- 【乾貨】動態規劃十問十答動態規劃
- Rust語言的核心開發團隊有毒 - HackMDRust
- Go語言核心36講(Go語言進階技術十)--學習筆記Go筆記
- 【Golang 基礎系列十】Go 語言 條件語句之ifGolang
- CSDN社群十問十答(Python第一期)Python
- CSDN社群十問十答(Jave第一期)
- 《Go 語言程式設計》讀書筆記(十)反射Go程式設計筆記反射
- 小程式開發十問
- CSDN社群十問十答(區塊鏈第一期)區塊鏈
- go語言開發入門:GO 開發者對 GO 初學者的建議Go
- 十光年團隊——Alpha衝刺總結
- go語言安卓開發Go安卓
- 大語言模型如何助力藥物開發? 哈佛團隊最新綜述模型
- 熱度過後《黑神話:悟空》開發團隊如何應對挖角事件?事件
- Go語言開發環境搭建Go開發環境
- go語言開發有哪些工具Go
- GO 語言快速開發入門Go
- GO語言整合開發GoLand 2022GoLand
- 對話專家:Go是DevOps時代最好的程式語言Godev
- 架設 Go Module Proxy Server 加速團隊開發GoServer
- TIOBE公佈11月程式語言排行榜,Go挺進前十!Go
- .NET 團隊 更新了 .NET 語言策略
- 李飛飛團隊多模態模型統一動作與語言;OpenAI 推出電話服務,讓更多人與 Chatgpt 對話丨 RTE 開發者日報模型OpenAIChatGPT開發者日報
- GO語言併發Go
- Go語言VSCode開發環境配置GoVSCode開發環境
- Go 語言開發除錯中階Go除錯
- Golang(go語言)開發環境配置Golang開發環境
- GO 語言 Web 開發實戰一GoWeb
- GO語言eclipse開發環境搭建GoEclipse開發環境
- 有Go語言實戰培訓班嗎?go語言開發環境搭建Go開發環境
- Go語言面試題分享:選擇題11道(2)go語言開發Go面試題
- Go語言開發者福利 - 國內版 The Go PlaygroundGo
- Go語言開發者福利 – 國內版 The Go PlaygroundGo
- 我是如何零基礎自學轉行人工智慧的(附十問十答)人工智慧
- 為什麼很多公司都轉型go語言開發?Go語言能做什麼Go
- 騰訊Tars團隊釋出Tars的go語言版本,效能是grpc五倍GoRPC
- Go語言實現十進位制轉換成二、八、十六進位制Go