最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

本地使用Docker搭建go開(kāi)發(fā)環(huán)境的全過(guò)程

 更新時(shí)間:2022年07月20日 10:57:18   作者:Jerry%chow  
最近想學(xué)習(xí)一下golang,自己之前一直把環(huán)境全部安裝在docker上,所以這次也想把golang的環(huán)境安裝在docker上,下面這篇文章主要給大家介紹了關(guān)于本地使用Docker搭建go開(kāi)發(fā)環(huán)境的相關(guān)資料,需要的朋友可以參考下

前言

對(duì)于我這種小白來(lái)說(shuō),本地環(huán)境搭建常規(guī)的操作一向是直接去go官網(wǎng)下載go安裝包,本機(jī)進(jìn)行安裝,然后配置相應(yīng)的GOROOT和GOPATH,再將GOPROXY和GO111MODULE設(shè)置完成,本地跑一下go env,可以正常使用就OK了。

不過(guò),自從學(xué)習(xí)了docker之后,被深深的套路了。

說(shuō)一下用docker部署本地環(huán)境的好處:

  • 可以保持系統(tǒng)軟件環(huán)境的純凈。這一點(diǎn)對(duì)于喜歡折騰各種工具軟件,然后把系統(tǒng)依賴(lài)環(huán)境搞的一團(tuán)糟的我來(lái)說(shuō),特別受用。
  • 開(kāi)發(fā)環(huán)境和當(dāng)前使用系統(tǒng)不再?gòu)?qiáng)依賴(lài)。這也是我喜歡的,這樣我不需要擔(dān)心本地系統(tǒng)的各種配置文件配置,以及多個(gè)環(huán)境之間以為系統(tǒng)差異導(dǎo)致的依賴(lài)包不同造成問(wèn)題,比如本地跑代碼正常,線上跑不通等。
  • 開(kāi)發(fā)軟件的管理方式更加統(tǒng)一。各種編程語(yǔ)言都有各自的安裝流程和步驟,各種應(yīng)用服務(wù)的安裝和配置方式也各不相同。通過(guò) Docker,不論是 MySQL,還是 Redis,我都只需要拉鏡像,映射端口,然后啟動(dòng)容器就可以正常使用了。

所以對(duì)于go而言,我也更希望能跑在docker容器上。

那么接下來(lái)就開(kāi)始吧!

安裝

1.docker安裝

我使用的是macOS Big Sur,在docker官網(wǎng)上下載對(duì)應(yīng)的dmg包,也有docker desktop

下載地址推薦(下載速度快):http://get.daocloud.io/

接下來(lái)等待安裝,安裝的步驟就不贅述了,比較簡(jiǎn)單

完成后,打開(kāi)終端,輸入,docker ,出現(xiàn)相關(guān)命令信息,表示安裝成功!

2.go安裝

docker完成之后,可以到docker hub(https://hub.docker.com/)上找go的鏡像

我使用目前go的新版go 1.18.1,找的鏡像是 golang:1.18.1-buster,拉取:

docker pull golang:1.18.1-buster

經(jīng)過(guò)等待之后,完成下載

docker images命令可以查看本地所有的鏡像,可以看到golang的鏡像已經(jīng)在了,接下來(lái)就可以操作了

運(yùn)行這個(gè)鏡像:

docker run -d --privileged=true golang

出現(xiàn)類(lèi)似于”24bbe436b43ea9dd1da0e…“一串,說(shuō)明啟動(dòng)成功

進(jìn)入容器:

docker exec -it 24bbe436

注意:這里的容器ID是我的,你可以用容器名字或者容器ID進(jìn)入

3.配置

進(jìn)入容器后,接下來(lái)就是設(shè)置go的env環(huán)境變量,首先用:

go env

既是為了驗(yàn)證go是否可以正常運(yùn)行,也是為了查看下當(dāng)前go的環(huán)境變量的情況

一般初始化下,go需要自定義設(shè)置的就三個(gè)GOPATH、GOPROXY和GO111MODULE

  • GOPATH:go工作目錄,也是以后代碼存放的地方
  • GOPROXY:go包下載代理地址,為了下載包快速所改
  • GO111MODULE:允許go mod 包管理工具的使用

三行代碼解決?。?/p>

go env -w GO111MODULE=on #開(kāi)啟go mod
go env -w GOPROXY="https://goproxy.cn"
go env -w GOPATH="/go" ?#如果本身就是,那就不需要再改了,可以省略

查看下,再次 go env,是否已修改為設(shè)置的這樣

自此,所有設(shè)置都完成,為了以后不重復(fù)進(jìn)行設(shè)置,我們保存容器生成我們自己部署好的go環(huán)境鏡像:

docker commit 24bbe43 golang-local

我將此容器重新打包為一個(gè)新的鏡像,命名為golang-local,以后只要開(kāi)啟這個(gè)鏡像,我就可以跑go代碼了,當(dāng)然,也可以將它傳到遠(yuǎn)程hub庫(kù),用于整個(gè)項(xiàng)目組的基本環(huán)境搭建使用,以后協(xié)同開(kāi)發(fā)的鏡像都是統(tǒng)一的,生產(chǎn)也可以使用。

遠(yuǎn)程庫(kù)建議使用阿里云的,具體的可以自行百度,這里就不展開(kāi)了

好了,現(xiàn)在 docker images就可以查看到我打包的新的golang鏡像,這也為后續(xù)與本機(jī)代碼的使用奠定基礎(chǔ),接下來(lái)就是最關(guān)鍵的一步了。

4.運(yùn)行

以上所有的步驟都是在docker里完成的,那么我們的本機(jī)與docker之間還存在著隔閡,本機(jī)放置的代碼依然無(wú)法使用go環(huán)境,因?yàn)楸緳C(jī)沒(méi)有安裝go,這個(gè)時(shí)候就需要用到docker經(jīng)典的東東——掛載容器卷,將本地的目錄與docker的容器關(guān)聯(lián)起來(lái),達(dá)到本地修改容器內(nèi)的文件也可以同步修改,開(kāi)始!!

先關(guān)閉之前的golang容器,docker stop 24bbe43,因?yàn)槲覀儾恍枰玫剿耍?/p>

然后開(kāi)啟我們新鏡像

docker run -itd -p 8080:8080 -v /Users/jay/go/project:/go --name golang-1.18.1 golang-local

解釋下關(guān)鍵的命令參數(shù):

  • -p:端口映射,將docker的端口映射到本機(jī)端口,我們用8080
  • -v:掛載容器卷,冒號(hào)前面是本機(jī)的地址,后面是容器內(nèi)存放地址,這里需要看你本地想放哪里,任意位置都可以,前提是需要寫(xiě)絕對(duì)路徑,注意啊,我加粗字體了。
  • –name:容器別名,我主要是為以后多版本處理的話,可以看到當(dāng)前容器的go版本,所以這么寫(xiě),這個(gè)可以省略

好了,這樣就開(kāi)啟了,至于說(shuō)為什么是用8080,這個(gè)不需要固定,可以任意改你想要的端口號(hào),也有個(gè)前提,與本地應(yīng)用軟件的使用端口不要沖突!??!

我用8080是因?yàn)槲业膅oweb服務(wù)框架gin的默認(rèn)端口就是8080,方便使用

接下來(lái)就是用gin來(lái)驗(yàn)證環(huán)境好不好用了

5.完成

在我的工作目錄/Users/jay/go/project下,

建一個(gè)項(xiàng)目,就叫g(shù)in-demo吧,

然后進(jìn)入gin-demo,創(chuàng)建一個(gè)main.go文件,

寫(xiě)上:

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello, Go.")
}

回到容器里查看下,對(duì)應(yīng)的/go目錄下是不是也存在相同的文件了,做個(gè)驗(yàn)證

然后開(kāi)始,在容器里操作,

進(jìn)入到gin-demo目錄下,

先驗(yàn)證下go代碼能不能跑起來(lái)

go run main.go

出現(xiàn)Hello,Go. 說(shuō)明正??梢耘艽a了,到此處,go環(huán)境算是搭建完了。

因?yàn)槲倚枰玫氖莋in框架,所以接下的事情就是gin框架的使用

go mod init創(chuàng)建go.mod文件,

然后將main.go的內(nèi)容改為以下:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()

    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run()
}

最后一步,go run main.go跑起來(lái)??!

接下來(lái)就是見(jiàn)證奇跡的時(shí)刻

打開(kāi)瀏覽器,輸入localhost:8080,回車(chē)!

瀏覽器上顯示 pong,成功!

PS:go的代碼運(yùn)行還是需要在容器里操作,如果不想來(lái)回進(jìn)出容器折騰,可以用go的一個(gè)fresh包,自動(dòng)捕獲代碼變動(dòng)重新打包運(yùn)行,本地就可以快樂(lè)的寫(xiě)代碼了,這個(gè)插件百度查下就行,這里分享一下包地址,就不細(xì)說(shuō)了,我個(gè)人習(xí)慣自己去重啟,比較不容易出錯(cuò)

go熱重啟go get github.com/pilu/fresh

運(yùn)行 fresh 命令 ,fresh 將會(huì)自動(dòng)運(yùn)行項(xiàng)目的 main.go

到這里就結(jié)束了,個(gè)人覺(jué)得還是稍有不便,以后再整理出一份用dockerfile來(lái)部署的辦法,那樣就方便多了一運(yùn)行就可以了,到哪都能用。

總結(jié)

到此這篇關(guān)于本地使用Docker搭建go開(kāi)發(fā)環(huán)境的文章就介紹到這了,更多相關(guān)Docker搭建go開(kāi)發(fā)環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)實(shí)例

    Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)實(shí)例

    golang語(yǔ)言本身就是c的工具集,開(kāi)發(fā)c的程序用到的大部分結(jié)構(gòu)體,內(nèi)存管理,攜程等,golang基本都有,下面這篇文章主要給大家介紹了關(guān)于Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Go語(yǔ)言實(shí)現(xiàn)并發(fā)控制的常見(jiàn)方式詳解

    Go語(yǔ)言實(shí)現(xiàn)并發(fā)控制的常見(jiàn)方式詳解

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言實(shí)現(xiàn)并發(fā)控制的幾種常見(jiàn)方式,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-03-03
  • Golang編程實(shí)現(xiàn)生成n個(gè)從a到b不重復(fù)隨機(jī)數(shù)的方法

    Golang編程實(shí)現(xiàn)生成n個(gè)從a到b不重復(fù)隨機(jī)數(shù)的方法

    這篇文章主要介紹了Golang編程實(shí)現(xiàn)生成n個(gè)從a到b不重復(fù)隨機(jī)數(shù)的方法,結(jié)合實(shí)例形式分析了Go語(yǔ)言字符串操作及隨機(jī)數(shù)生成的相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • golang開(kāi)發(fā)?gorilla?websocket的使用示例詳解

    golang開(kāi)發(fā)?gorilla?websocket的使用示例詳解

    這篇文章主要介紹了golang開(kāi)發(fā)?gorilla?websocket的使用示例詳解,介紹了websocket的簡(jiǎn)單使用,我們使用的版本是1.3.0,具體操作方法跟隨小編一起學(xué)習(xí)吧
    2024-05-05
  • 一文帶你熟悉Go語(yǔ)言中函數(shù)的使用

    一文帶你熟悉Go語(yǔ)言中函數(shù)的使用

    這篇文章主要和大家分享一下Go語(yǔ)言中的函數(shù)的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的小伙伴可以參考一下
    2022-11-11
  • Golang極簡(jiǎn)入門(mén)教程(二):方法和接口

    Golang極簡(jiǎn)入門(mén)教程(二):方法和接口

    這篇文章主要介紹了Golang極簡(jiǎn)入門(mén)教程(二):方法和接口,本文同時(shí)講解了錯(cuò)誤、匿名域等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Golang服務(wù)中context超時(shí)處理的方法詳解

    Golang服務(wù)中context超時(shí)處理的方法詳解

    在Go語(yǔ)言中,Context是一個(gè)非常重要的概念,它存在于一個(gè)完整的業(yè)務(wù)生命周期內(nèi),Context類(lèi)型是一個(gè)接口類(lèi)型,在實(shí)際應(yīng)用中,我們可以使用Context包來(lái)傳遞請(qǐng)求的元數(shù)據(jù),本文將給大家介紹Golang服務(wù)中context超時(shí)處理的方法和超時(shí)原因,需要的朋友可以參考下
    2023-05-05
  • golang常用庫(kù)之pkg/errors包第三方錯(cuò)誤處理包案例詳解

    golang常用庫(kù)之pkg/errors包第三方錯(cuò)誤處理包案例詳解

    這篇文章主要介紹了golang常用庫(kù)之pkg/errors包第三方錯(cuò)誤處理包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • GOLANG使用Context管理關(guān)聯(lián)goroutine的方法

    GOLANG使用Context管理關(guān)聯(lián)goroutine的方法

    這篇文章主要介紹了GOLANG使用Context管理關(guān)聯(lián)goroutine的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Golang實(shí)現(xiàn)帶優(yōu)先級(jí)的select

    Golang實(shí)現(xiàn)帶優(yōu)先級(jí)的select

    這篇文章主要為大家詳細(xì)介紹了如何在Golang中實(shí)現(xiàn)帶優(yōu)先級(jí)的select,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Golang有一定的幫助,需要的可以參考一下
    2023-04-04

最新評(píng)論

伊春市| 辰溪县| 中西区| 芜湖市| 鸡泽县| 习水县| 庆元县| 浠水县| 永胜县| 山阳县| 瑞安市| 团风县| 隆回县| 泸水县| 梁平县| 定结县| 新干县| 灵宝市| 昭觉县| 汉源县| 随州市| 安庆市| 额尔古纳市| 鹰潭市| 信阳市| 嘉黎县| 威海市| 兴义市| 岐山县| 郧西县| 宣武区| 昭平县| 千阳县| 上蔡县| 茂名市| 林周县| 荣昌县| 浑源县| 牟定县| 肇源县| 高青县|