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