Go 語言的包管理,微觀吐槽

這是一篇踩完 Go dep 這個官方包管理器的坑以後的半吐槽文(人畜無害,看看就好 :))。node

一直以來,Go語言的『包管理器』這個問題,都沒有獲得有效地解決,當 pip 和npm 在天上飛行的時候,Go語言的包管理就像在地上爬行同樣。程序員

你固然能夠無腦 go get ,畢竟是內置的,欽定的。然而,一旦涉及到團隊合做時,因爲 go get 沒法有效控制依賴包的『版本語義管理』,別人頗有可能沒法100%搞成和你同樣的環境。而後,某些詭異的Bug,就從這裏產生了。那麼怎麼作才能保證 100 %可靠呢?直接將被依賴包的源代碼也提交到 Git 裏面, 讓被依賴包也成爲版本管理的一部分。好吧,這種蠢萌蠢萌的作法,既簡單粗暴,還不會出錯,我待過的一個團隊就是這樣作的(項目幾乎不會升級被依賴包)。npm

然而,有不少人以爲將第三方包的源碼也提交到Git中,是一種很是 Stupid 的作法(壯士,你敢將 node_modules 下面的代碼提交到貴司的Git中去嗎)。因而,各類各樣的『社區解決方案』就出現了,「百家爭鳴」。好比,你走運的話,能夠搜索到這樣的文章標題:ide

  1. Why I Use Godep?
  2. Why Glide is Better than Godep?
  3. Migrate from godep

balabala...工具

「這麼多的解決方案,可真是挑花了朕的眼睛呀。」 你感嘆道。若是你由於某種契機,更換了幾個主寫Go的團隊(多是不一樣公司),那麼可能這些包管理器你都要使用一次。「重在參與嘛,反正又不難,多學點知識老是最好的。」 大V級程序員這樣教導你。學習

是啊,確實不難,費不了多少時間。但是,你抱怨的主題多是『馬蛋,一個包管理器而已,至於整出這麼多花樣嗎,難道不該該是語言自帶,官方獨裁維護的嗎,難道不是 install uninstall 一把梭嗎』。只是,大V級程序員沒有聽懂,覺得『這個年輕人浮躁,不肯意學習』。code

因而,Go dep出來了。附帶還有幾篇文章,說包管理是如何如何複雜的一件事情,dep 這個工具是如何如何地牛逼。若是你像我同樣,是一個壓根沒有任何動力,去了解這件事情如何複雜如何牛逼的小白,奮力膜拜大佬,給大佬遞茶,就完事了。只是呢,Go dep這個工具,尚未徹底進入官方的工具鏈中,並且使用方式有點怪怪的。ip

「沒事的,大佬們必定會出一篇文章,分析爲何這樣是最牛逼的,Go語言不少特性都沒有,你不也同樣被洗成了腦殘粉了嗎? :)」 你這樣想。(絕對沒有黑得意思,我已經寫了挺多Go代碼了,就是 if err != nil 打得有點手疼 )。get

對於我這種只會npm install的人來講,是絕對沒有動力去了解 npm 這個工具的前因後果,先後關係的,可是Go 語言,也許就要花上一整大段時間,去Google清楚這中間七七八八的瑣碎事。因此說,還真有點懷念 npm 呢。源碼

「明明有這麼多牛逼的大佬,明明是這麼痛的痛點,怎麼就沒有人發現&吐槽,只有我這個小白才以爲,這是一個『房間裏的大象』嗎?等等,是否是我智力不夠能力不行啊?」 在一個累覺不愛的下午,你發出了感概。

「嗯,必定是個人問題。」

相關文章
相關標籤/搜索