這篇文章主要介紹文件變更時自動重載Go程序的方法有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)公司是專業(yè)的曹縣網(wǎng)站建設公司,曹縣接單;提供網(wǎng)站設計制作、做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行曹縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
許多人希望在寫GO時擁有實時加載代碼(熱編譯)的效果,特別是那些習慣使用 JavaScript,Python和Ruby等解釋語言的人,本文介紹了5種實時重新加載Go程序的方法。
本文假設已安裝Go編譯器,并且已將GOPATH/bin
路徑添加到PATH環(huán)境變量中。
在開始之前,我們先創(chuàng)建一個簡單的web服務器,可以返回響應內(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)}
Air 是一個命令行程序,可以為Go程序提供實時代碼加載。
通過運行以下命令來安裝Air。
go get -u github.com/cosmtrek/air
下一步,在使用項目的根目錄中創(chuàng)建Air配置文件.air.conf
。
# .air.conf # toml配置文件來源于 [Air](https://github.com/cosmtrek/air)# 工作區(qū)間 # .(當前目錄)或絕對路徑, 注意這些目錄都在根目錄下面.root = "." tmp_dir = "tmp"[build]# 只是普通的shell命令。 可以使用`make`。 cmd = "go build -o ./tmp/main ."# `cmd`配置命令輸出的二進制文件的位置。 bin = "tmp/main"# 自定義二進制輸出。 full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"# 監(jiān)聽的文件擴展后綴列表。 include_ext = ["go", "tpl", "tmpl", "html"]# 忽略這些文件擴展名或目錄。 exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]# 如果指定,則監(jiān)聽包含這些文件。 include_dir = []# 忽略文件列表.exclude_file = []# 如果文件修改太頻繁,則不必在每次修改時都立刻觸發(fā)構(gòu)建,設置觸發(fā)等待時間。 delay = 1000 # ms # 發(fā)生編譯錯誤時,是否停止舊的二進制程序。 stop_on_error = true# 該日志文件放置在tmp_dir中。 log = "air_errors.log"[log]# 日志是否顯示時間 time = false[color]# 自定義每類輸出的顏色。 如果找不到這個顏色,使用原本的日志輸出演示。 main = "magenta"watcher = "cyan"build = "yellow"runner = "green"[misc]# 退出時是否刪除臨時目錄 clean_on_exit = true
配置是簡單明了的,請根據(jù)你的項目情況去調(diào)整。
最后,不要使用常用的go run
命令來運行Go程序,而應使用air
命令來啟動程序。
這種方法需要使用docker,如果你沒有安裝,可以按照
我們?nèi)詫⑹褂肁ir庫,因此仍然需要Air配置文件。 如果你還沒有,請創(chuàng)建一個配置文件。
Docker鏡像cosmtrek/air
附帶安裝了Air命令,并且GOPATH環(huán)境變量設置為/go
。
我們只需要將我們的項目目錄掛載到Docker容器的GOPATH中,并使用-p暴露需要使用的端口即可。 我們可以通過運行docker run命令來實現(xiàn)這一點:
docker run -it --rm -w-v : -p :
就我而言,我需要運行以下命令:
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ù)將項目目錄 /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服務器正在監(jiān)聽端口5000,因此需要使用-p
標志將容器端口5000暴露到主機端口5000。
-p 5000:5000
最后,指定docker鏡像名稱cosmtrek / air
。
Gin是另一個用于實時重新加載Go應用程序的命令行程序。
通過運行以下命令來安裝Gin。
go get github.com/codegangsta/gin
而不是使用通常的go run main.go
命令運行應用程序,而是使用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)聽那個目錄可以使用--excludeDir
參數(shù),例如:
gin --appPort 5000 --port 3000 --excludeDir ./frontend
如果你項使用Gin實現(xiàn)加載沒有啟動端口監(jiān)聽的程序,你們必須使用--immediate
參數(shù)。但是Gin仍然會去5000端口。
你可以在這找到所有受支持的參數(shù)Gin的Github.
Nodemon是另一個用于實時重新加載Node應用程序的命令行程序。 但是可以通過使用--exec
參數(shù)設置啟動命令用于啟動其他應用程序。
Nodemon需要安裝Nodejs和NPM。 如果沒有安裝,可以按照nodejs的官方文檔進行安裝.
運行以下命令來安裝nodemon:
npm install -g nodemon
現(xiàn)在,我們可以通過運行以下命令來使用Nodemon運行Web服務器:
nodemon --exec go run main.go --signal SIGTERM
如果要配置Nodemon,請在項目的根目錄中創(chuàng)建配置文件nodemon.json
。 完整可用的示例配置文件
Fresh 是另一個GO實現(xiàn)的用于實時重新加載Go的程序
安裝Fresh
go get github.com/pilu/fresh
而不是使用常用的go run main.go
命令來運行應用程序,而是使用fresh
命令。
fresh
要配置Fresh,需要在項目的根目錄中創(chuàng)建一個配置文件runner.conf
。
這是一個示例配置文件。
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:
以上是文件變更時自動重載Go程序的方法有哪些的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!