用Go語言做產品半年的一些感覺

2021-09-06 23:44:58 字數 2235 閱讀 6270

用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,安裝***mod(比如python和ruby),配置***(此處省略200字),中間還要注意各個模組的版本 哦,否則遇到各種不明白的錯誤還得抓掉無數頭髮。

go語言呢?編譯,執行。什麼?恩,就是這麼簡單。不要apache或者其他http伺服器了?不要。那不是很不科學?呃,是有點魔幻。

以前一直覺得iis和apache都是很黑很大的一坨東西,裡面全是超科技,配置檔案也很高深,高人過來這裡改改那裡改改默默的效能就提高了n倍。

剛開始還覺得乙個可執行檔案孤零零的跑起來好單薄,等理解的更多之後就發現其實http伺服器的核心概念就這麼幾個,go語言內建支援了,所以這麼輕便就能跑了。

不覺得厲害?恩,考慮一下更新**的場景呢?關閉例項,更新**,編譯,執行(更新時間如何讓服務不間斷咱先不討論,這需要其他伺服器配合)。很省心。

特別像我這種windows程式設計師,本來面對linux的時候就各種心驚膽顫,各種不熟悉,要是讓我再去修改修改資料夾許可權什麼的我就炸了。

好吧,嘮嘮叨叨說了一堆,總結下來就一點。我已經從go語言的粉絲變成死忠了(所以大家也不用費口舌來跟我辯論了哈哈),看到go語言就開心,寫著舒心,用著順心。

你要是看到這兒了,那就順便提一句,我們打算在1月份召乙個go語言的伺服器端工程師,如果你碰巧喜歡go語言,愛看網路**,對演算法充滿了愛,又身在上海,那不妨找我聊聊,咱也許能一起開開心心的做個好東西出來。

做產品的一些思考

從我當前的職業經歷來看,做過兩種類別的產品 一種是客戶定義好了需求由我們去實現,我姑且稱其為做專案 一種是自己去探索使用者需求然後在不斷的摸索中引導使用者,實現價值,這是我筆下真正的產品。做專案目標明確,使用者參與度高,風險小 做產品屬於定位目標,然後摸著石頭過河,中間淺灘礁石密布,風險挑戰可見一斑...

做產品的一些思考

從我當前的職業經歷來看,做過兩種類別的產品 一種是客戶定義好了需求由我們去實現,我姑且稱其為做專案 一種是自己去探索使用者需求然後在不斷的摸索中引導使用者,實現價值,這是我筆下真正的產品。做專案目標明確,使用者參與度高,風險小 做產品屬於定位目標,然後摸著石頭過河,中間淺灘礁石密布,風險挑戰可見一斑...

做產品的一些思考

從我當前的職業經歷來看,做過兩種類別的產品 一種是客戶定義好了需求由我們去實現,我姑且稱其為做專案 一種是自己去探索使用者需求然後在不斷的摸索中引導使用者,實現價值,這是我筆下真正的產品。做專案目標明確,使用者參與度高,風險小 做產品屬於定位目標,然後摸著石頭過河,中間淺灘礁石密布,風險挑戰可見一斑...