go环境搭建_容器化 Go 开发环境的尝试
Go語言中文網,致力于每日分享編碼知識,歡迎關注我,會有意想不到的收獲!
01 寫在前面
昨天上午“起早”到附近的影院看《波西米亞狂想曲》,選的座位比較靠前,最后的二十分鐘里愣是沒好意思把褲兜里的紙巾掏出來 。未來打算用三到五年的時間去開創自己的事業,想必道路不會平坦,不過認真做事的態度不變,大概率這段人生會有一個“酣暢淋漓”的收尾吧。
本文是我在思考“如何組建團隊”時候的一個小嘗試,旨在通過容器技術(docker)降低探索 Golang 技術開發的門檻。目前的效果還不是很明顯,不過作為一種新思路,非常值得大家了解。
02 適用人群
入門√——初級——中級——高級,本文適合所有對技術感興趣的開發者。
03 容器化 Go 開發環境
容器化的價值
搭建開發環境往往是一個啰嗦繁雜的過程。對職業開發者如此,對知識學習者和探索者亦如此。
職業編碼工作中,代碼編輯測試完成后部署到生產環境,需要按照自己本地的開發環境重新配置生產環境的機器。由于本地開發環境的搭建比較隨性,往往,本地能夠跑起來的代碼部署到生產環境后跑不起來,或并未達到預期的運行效果。
對于一個剛剛開始學習 《C 語言程序設計》課程的大學生來說,編譯出自己的 “Hello World” 往往意味著很多事先的準備工作(至少先把課堂上老師三言兩語帶過的開發環境搭建起來)。
之前因為項目的需要我魔改過日志收集工具 fluent/fluent-bit ,這是一個主要由 C 語言進行開發的項目,而我對 C 語言的認識還停留在大學課堂的水平,更何況我本地沒有搭建過開發 C 的環境。
容器化技術能很好地解決上面的問題。職業開發者使用 Docker(容器化技術的一種)把環境搭建的過程封裝到容器里,并以鏡像的形式復制到生產環境得以“復現”相同的環境。作為知識學習者,完全可以利用相似的技術“復現”老師課堂上使用的環境。而作為知識探索者,在修改了 fluent-bit 的源碼后,我利用其源碼中提供的 Dockerfile 很方便地實現了定制化源碼的編譯,快速驗證了思路可行性及定制化功能的可用性。
如果讀者未使用過 Docker,可以參考《如何用一個例子上手docker》這篇博客的內容及其參考中列出的地址了解并嘗試一下,應該會被甜到。
容器化的 Go 開發環境
為了說明問題并方便讀者能容易地在自己機器上驗證,我在《Go 反序列化 JSON 字符串的兩種常見用法》和 《淺談 Go 標準庫對 JSON 的處理效率》兩篇博客里刻意貼了完整而冗長的源碼內容。雖說 package 和 import 語句對博客的內容并沒有任何作用,但是如果因為多這樣幾句內容就能讓代碼成為完整可運行的源碼,從而節省讀者自己構造完整源代碼的時間,我認為是值得且必要的。
可以把思考更進一步,如果讀者朋友沒有 Go 開發環境(或者與作者本地的開發環境不一致),如何才能以一種低成本的方式開始這一切呢?不知不覺就想到了 Docker 技術(都是套路)。
定制化 Go 開發環境鏡像
想要低成本獲取 Go 開發環境,思路很簡單,把 Go 開發環境打包到容器里(其實 官方 已經存在這種鏡像),大家只需要拉取相應的鏡像然后運行就可以了。如下面的源碼所示,為了方便編輯并調試 Go 源碼,我在 Go 官方鏡像的基礎上安裝并簡單配置了 vim 和 delve,并把鏡像推送到了 Docker Hub 倉庫中。更詳盡的內容可以參考 GitHub - chalvern/smile 。
運行 Go 開發環境鏡像
環境(上下文)一致的必要性
我在學生時代發現一個很有趣的現象,國外的教材往往頁碼很足整本書很厚,而中文的教材頁碼比較少相對要薄一些。排除一部分語言表達力的因素,主要是因為國外的教材喜歡包含比較多知識之外的細節。
以《C 語言程序設計》類似的書籍來說,是直接從 Hello World 講起好呢?還是從詳細的環境搭建步驟講起好呢?我記得當年在學習 C 語言編程的時候,為了搭建開發環境到圖書館找了很多資料,最終也未“復現”教科書上一模一樣的開發環境,導致在學習過程中產生非常多的疑惑。有的同學在疑惑面前退縮了,漸漸失去了編碼的興趣,最終的成績自然也不如人意。
國外教材比較厚重的另一個原因,是國外教材中喜歡包含比較詳細的參考文獻。那么,書籍或者博客中,是否應該把參考文獻放進正文呢?我認為是必要的。把參考文獻列出來,一方面可以表達對相關論點提出者的尊重,另一方面則方便讓讀者能夠進一步了解論點的淵源或者進一步考證“真相”。書里或博客里所論述的是“集百家之長的一家之言”呢?還是純碎個人思考得出來的“一家之言”呢?不同的分類,其說服力以及可采納率其實是不一樣的;如果混淆在一起使人不可分辨,容易讓人忽視共識的力量,
04 小結
本文嘗試通過容器技術(docker)降低探索 Golang 技術開發的門檻。相比于把開發環境直接安裝到自己的電腦上“嘗鮮”,容器化技術能夠很好地避免 Go 開發環境及其依賴項(比如 $GOPATH、$GOROOT 等變量)對電腦的污染,同時容器化技術能夠很好地“復現”一致可用的開發環境,避免引入其他變量,從而降低技術探索的難度。
05 參考
- 以認真的態度做完美的事情(2018年總結) - 敬維 之前寫的 2018 年的總結
- Docker基本原理簡析 - 敬維 簡單介紹了 docker 涉及到的三種技術:Namespace、CGroup與AUFS
- 如何用一個例子上手docker - 敬維 用一個例子來上手使用 docker。
- GitHub - fluent/fluent-bit 輕量級日志收集應用
- Go 反序列化 JSON 字符串的兩種常見用法 - 敬維 兩種反序列化 JSON 字符串的方法,包含了復制黏貼即可運行的源碼
- 淺談 Go 標準庫對 JSON 的處理效率 - 敬維 探究 Go 標準庫對 JSON 的處理效率,包含了復制黏貼即可運行的源碼
著作權歸作者所有。
原文: https://jingwei.link/2019/03/24/docker-golang-development.html
本文作者:敬維,原創授權發布
總結
以上是生活随笔為你收集整理的go环境搭建_容器化 Go 开发环境的尝试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 临皋亭外逢别君
- 下一篇: axure怎么做5秒倒计时_装修隔音怎么