日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go环境搭建_容器化 Go 开发环境的尝试

發布時間:2023/12/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 開發環境鏡像

  • 拉取鏡像:docker pull chalvern/golang:1.12
  • 以 privileged 方式運行鏡像:docker run -it --privileged chalvern/golang:1.12 bash
  • 此時便有了一個 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 开发环境的尝试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。