溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

文件變更時(shí)自動(dòng)重載Go程序的方法有哪些

發(fā)布時(shí)間:2020-11-04 10:56:16 來源:億速云 閱讀:232 作者:小新 欄目:編程語言

這篇文章主要介紹文件變更時(shí)自動(dòng)重載Go程序的方法有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

文件變更時(shí)自動(dòng)重載Go程序的方法有哪些

許多人希望在寫GO時(shí)擁有實(shí)時(shí)加載代碼(熱編譯)的效果,特別是那些習(xí)慣使用 JavaScript,Python和Ruby等解釋語言的人,本文介紹了5種實(shí)時(shí)重新加載Go程序的方法。

本文假設(shè)已安裝Go編譯器,并且已將GOPATH/bin路徑添加到PATH環(huán)境變量中。

在開始之前,我們先創(chuàng)建一個(gè)簡單的web服務(wù)器,可以返回響應(yīng)內(nèi)容”Hello,World”。

package mainimport (
    "net/http")func main() {
    http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello, World"))
    })

    http.ListenAndServe(":5000", nil)}

Method 1: 使用Air

Air 是一個(gè)命令行程序,可以為Go程序提供實(shí)時(shí)代碼加載。

通過運(yùn)行以下命令來安裝Air。

go get -u github.com/cosmtrek/air

下一步,在使用項(xiàng)目的根目錄中創(chuàng)建Air配置文件.air.conf

# .air.conf
# toml配置文件來源于 [Air](https://github.com/cosmtrek/air)# 工作區(qū)間
# .(當(dāng)前目錄)或絕對路徑, 注意這些目錄都在根目錄下面.root = "." tmp_dir = "tmp"[build]# 只是普通的shell命令。 可以使用`make`。
cmd = "go build -o ./tmp/main ."# `cmd`配置命令輸出的二進(jìn)制文件的位置。
bin = "tmp/main"# 自定義二進(jìn)制輸出。
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"# 監(jiān)聽的文件擴(kuò)展后綴列表。
include_ext = ["go", "tpl", "tmpl", "html"]# 忽略這些文件擴(kuò)展名或目錄。
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]# 如果指定,則監(jiān)聽包含這些文件。
include_dir = []# 忽略文件列表.exclude_file = []# 如果文件修改太頻繁,則不必在每次修改時(shí)都立刻觸發(fā)構(gòu)建,設(shè)置觸發(fā)等待時(shí)間。
delay = 1000 # ms
# 發(fā)生編譯錯(cuò)誤時(shí),是否停止舊的二進(jìn)制程序。
stop_on_error = true# 該日志文件放置在tmp_dir中。
log = "air_errors.log"[log]# 日志是否顯示時(shí)間
time = false[color]# 自定義每類輸出的顏色。 如果找不到這個(gè)顏色,使用原本的日志輸出演示。
main = "magenta"watcher = "cyan"build = "yellow"runner = "green"[misc]# 退出時(shí)是否刪除臨時(shí)目錄
clean_on_exit = true

配置是簡單明了的,請根據(jù)你的項(xiàng)目情況去調(diào)整。

最后,不要使用常用的go run命令來運(yùn)行Go程序,而應(yīng)使用air命令來啟動(dòng)程序。

Method 2: docker運(yùn)行Ari

這種方法需要使用docker,如果你沒有安裝,可以按照

我們?nèi)詫⑹褂肁ir庫,因此仍然需要Air配置文件。 如果你還沒有,請創(chuàng)建一個(gè)配置文件。

Docker鏡像cosmtrek/air附帶安裝了Air命令,并且GOPATH環(huán)境變量設(shè)置為/go

我們只需要將我們的項(xiàng)目目錄掛載到Docker容器的GOPATH中,并使用-p暴露需要使用的端口即可。 我們可以通過運(yùn)行docker run命令來實(shí)現(xiàn)這一點(diǎn):

docker run -it --rm -w <WORKING_DIR> -v <PROJECT_FOLDER>:<MOUNT_POINT> -p <HOST_PORT>:<CONTAINER_PORT> <IMAGE_NAME>

就我而言,我需要運(yùn)行以下命令:

docker run -it --rm -w /go/src/github.com/praveen001/live-reloading -v /go/src/github.com/praveen001/live-reloading:/go/src/github.com/praveen001/live-reloading -p 5000:5000 cosmtrek/air

解釋:

使用-v參數(shù)將項(xiàng)目目錄 /home/praveen/go/src/github.com/praveen001/live-reloading 掛載到容器里面的GOPATH中的目錄/go/src/github.com/praveen001/live-reloading

-v /home/praveen/go/src/github.com/praveen001/live-reloading:/go/src/github.com/praveen001/live-reloading

使用-w參數(shù)指定掛載目錄成工作目錄。

-w /go/src/github.com/praveen001/live-reloading

Web服務(wù)器正在監(jiān)聽端口5000,因此需要使用-p標(biāo)志將容器端口5000暴露到主機(jī)端口5000。

-p 5000:5000

最后,指定docker鏡像名稱cosmtrek / air。

Method 3: 使用Gin

Gin是另一個(gè)用于實(shí)時(shí)重新加載Go應(yīng)用程序的命令行程序。

通過運(yùn)行以下命令來安裝Gin。

go get github.com/codegangsta/gin

而不是使用通常的go run main.go命令運(yùn)行應(yīng)用程序,而是使用gin命令。

就我而言,--appPort參數(shù)告訴Gin監(jiān)聽端口5000,--port參數(shù)告訴Gin代理監(jiān)聽端口3000端口

gin --appPort 5000 --port 3000

現(xiàn)在使用地址http://localhost:3000訪問Gin程序.

如果要排除監(jiān)聽那個(gè)目錄可以使用--excludeDir參數(shù),例如:

gin --appPort 5000 --port 3000 --excludeDir ./frontend

如果你項(xiàng)使用Gin實(shí)現(xiàn)加載沒有啟動(dòng)端口監(jiān)聽的程序,你們必須使用--immediate參數(shù)。但是Gin仍然會(huì)去5000端口。

你可以在這找到所有受支持的參數(shù)Gin的Github.

Method 4: 使用Nodemon

Nodemon是另一個(gè)用于實(shí)時(shí)重新加載Node應(yīng)用程序的命令行程序。 但是可以通過使用--exec參數(shù)設(shè)置啟動(dòng)命令用于啟動(dòng)其他應(yīng)用程序。

Nodemon需要安裝Nodejs和NPM。 如果沒有安裝,可以按照nodejs的官方文檔進(jìn)行安裝.

運(yùn)行以下命令來安裝nodemon:

npm install -g nodemon

現(xiàn)在,我們可以通過運(yùn)行以下命令來使用Nodemon運(yùn)行Web服務(wù)器:

nodemon --exec go run main.go --signal SIGTERM

如果要配置Nodemon,請?jiān)陧?xiàng)目的根目錄中創(chuàng)建配置文件nodemon.json。 完整可用的示例配置文件

Method 5: 使用Fresh

Fresh 是另一個(gè)GO實(shí)現(xiàn)的用于實(shí)時(shí)重新加載Go的程序

安裝Fresh

go get github.com/pilu/fresh

而不是使用常用的go run main.go命令來運(yùn)行應(yīng)用程序,而是使用fresh命令。

fresh

要配置Fresh,需要在項(xiàng)目的根目錄中創(chuàng)建一個(gè)配置文件runner.conf

這是一個(gè)示例配置文件。

root:              .tmp_path:          ./tmp
build_name:        runner-build
build_log:         runner-build-errors.log
valid_ext:         .go, .tpl, .tmpl, .html
no_rebuild_ext:    .tpl, .tmpl, .html
ignored:           assets, tmp
build_delay:       600colors:            1log_color_main:    cyan
log_color_build:   yellow
log_color_runner:  green
log_color_watcher: magenta
log_color_app:

以上是文件變更時(shí)自動(dòng)重載Go程序的方法有哪些的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI