用Go語言做產品剛好半年,有一些感覺跟大家說道說道。
在使用Go之前,我常常想象,無法使用先進的Debug工具會對工作進度造成多么巨大的影響。甚至在Visual Studio的嬌慣下認為,不能調試基本就無法正確的寫出代碼了。
由于我在Windows平臺,能夠支持Go語言調試的gdb老是無法工作,所以在這半年中,我一次都沒有打過斷點,也沒有開啟過一次單步跟蹤。剛開始我心里非常沒底,只好老老實實為每一個方法寫測試代碼,每開發完一個功能之后就運行所有測試。這個方法其實也算是家喻戶曉的了,但很奇怪,我在寫C#的時候并不會自覺地這樣做。只有在一些非常特殊的部分會寫部分測試代碼。
事后我想了想,懶惰只是其中一個原因,還有一個原因是“編譯速度”。眾所周知,Go語言的編譯速度是非常快的。平時看到這個消息應該沒什么感覺,一旦開始寫一段就執行一次”編譯-》測試“,效果馬上就出來了。我的項目目前約有3萬行代碼,編譯速度平均時間2秒。再加上SublimeText3里面方便的GoSublime插件,寫完代碼 Ctrl+. Ctrol+r,幾秒之后就看到結果了。非常方便。
當然,你可能說這樣的事情在Visual Studio里面也很容易能做到,哈,你說的對,但你堅持寫一段就來一次試試看,會有被打斷的感覺。(我可能有編輯器強迫癥,以前喜歡Vim,現在愛SublimeText,總覺得圖形化IDE的各種面板很容易讓我分神,大家別較真,:P)
以前每次碰到bug,必須用單步調式跟下去,現在武功被廢了,我只能硬著頭皮肉眼看代碼,不時用print把變量值打出來看看。一段時間之后我發現碰到bug的次數在減少。語言熟練度增加是一方面,但我自認是個粗心的人,況且寫了近10年C#也沒這種感覺。
仔細想了想,我覺得是Go語言本身的簡潔帶來的好處。Go語言的語法和特性就那么點,清清楚楚,沒有什么詭異的技巧,也沒太多花哨的概念。寫之前不需要去看”Go語言注意事項100條“之類的東西。再加上編譯器的嚴格提示(比如聲明一個變量不賦值會導致編譯無法通過),很大程度上保證了不會因為疏忽而寫出”神奇“的代碼。
在這里還得提一下Go語言在問世之初就固執的帶上的一個小工具”GoFmt”,它的作用很簡單,格式化Go代碼。當初我還挺納悶,這東西可有可無,早期有這時間做點別的什么不好?
現在明白了,代碼的可讀性對于程序員來說再重要不過了。這讓肉眼找問題舒服了不少。
所以一套組合拳下來,簡潔的語法設計+極好的代碼可讀性+嚴格的編譯器+內置的測試支持 = 非常舒適的編寫體驗+高質量的代碼。
大家應該都對“最佳實踐”這個詞又愛又恨,應該都過這種場景:要實現一個功能,但腦子里出現了兩三種實現方式,于是花了很長時間做選擇。當然,對系統級的設計,這樣做無可厚非。但如果是非常簡單的功能,比如“這里究竟應該用指針呢?還是指針的指針呢?還是數組呢?還是鏈表?“,這種選擇的痛苦就顯得意義不大了。
在寫Go的時候我很少會被這種問題擋住,不需要考慮這里究竟是傳遞引用還是傳遞值,到底是深拷貝還是淺拷貝。不知不覺間編寫過程就非常順滑,真正的專注到了業務邏輯上。大家也可以罵我沒出息,這種基礎問題還會糾結?水平太差了吧!可是,能用三行代碼表達的邏輯,為什么要用十行呢?這個道理大家都懂,嘿嘿,那運用到語言設計上應該也是一樣的吧。
另外一點就是部署上的舒服了。反正Go語言的程序到最后編譯出來都是一個可執行文件,跑起來就行了。這句話看起來沒什么意義對吧?好,那咱就先來聊聊如何部署一個網站,安裝Apache,安裝xxxMod(比如Python和Ruby),配置xxx(此處省略200字),中間還要注意各個模塊的版本哦,否則遇到各種不明白的錯誤還得抓掉無數頭發。
Go語言呢?編譯,運行。什么?恩,就是這么簡單。不要Apache或者其他Http服務器了?不要。那不是很不科學?呃,是有點魔幻。
以前一直覺得IIS和Apache都是很黑很大的一坨東西,里面全是超科技,配置文件也很高深,高人過來這里改改那里改改默默的性能就提高了n倍。
剛開始還覺得一個可執行文件孤零零的跑起來好單薄,等理解的更多之后就發現其實Http服務器的核心概念就這么幾個,Go語言內置支持了,所以這么輕便就能跑了。
不覺得厲害?恩,考慮一下更新代碼的場景呢?關閉實例,更新代碼,編譯,運行(更新時間如何讓服務不間斷咱先不討論,這需要其他服務器配合)。很省心。
特別像我這種windows程序員,本來面對linux的時候就各種心驚膽顫,各種不熟悉,要是讓我再去修改修改文件夾權限什么的我就炸了。
好吧,嘮嘮叨叨說了一堆,總結下來就一點。我已經從Go語言的粉絲變成死忠了(所以大家也不用費口舌來跟我辯論了哈哈),看到Go語言就開心,寫著舒心,用著順心。
你要是看到這兒了,那就順便提一句,我們打算在1月份召一個Go語言的服務器端工程師,如果你碰巧喜歡Go語言,愛看網絡小說,對算法充滿了愛,又身在上海,那不妨找我聊聊,咱也許能一起開開心心的做個好東西出來。
文章列表