這篇文章主要介紹文件變更時(shí)自動(dòng)重載Go程序的方法有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)公司是專業(yè)的曹縣網(wǎng)站建設(shè)公司,曹縣接單;提供網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行曹縣網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
許多人希望在寫GO時(shí)擁有實(shí)時(shí)加載代碼(熱編譯)的效果,特別是那些習(xí)慣使用 JavaScript,Python和Ruby等解釋語(yǔ)言的人,本文介紹了5種實(shí)時(shí)重新加載Go程序的方法。
本文假設(shè)已安裝Go編譯器,并且已將GOPATH/bin
路徑添加到PATH環(huán)境變量中。
在開始之前,我們先創(chuàng)建一個(gè)簡(jiǎn)單的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)}
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)前目錄)或絕對(duì)路徑, 注意這些目錄都在根目錄下面.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
配置是簡(jiǎn)單明了的,請(qǐng)根據(jù)你的項(xiàng)目情況去調(diào)整。
最后,不要使用常用的go run
命令來運(yùn)行Go程序,而應(yīng)使用air
命令來啟動(dòng)程序。
這種方法需要使用docker,如果你沒有安裝,可以按照
我們?nèi)詫⑹褂肁ir庫(kù),因此仍然需要Air配置文件。 如果你還沒有,請(qǐng)創(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
。
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.
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,請(qǐng)?jiān)陧?xiàng)目的根目錄中創(chuàng)建配置文件nodemon.json
。 完整可用的示例配置文件
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)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享名稱:文件變更時(shí)自動(dòng)重載Go程序的方法有哪些
標(biāo)題URL:http://www.rwnh.cn/article10/jisddo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計(jì)公司、網(wǎng)頁(yè)設(shè)計(jì)公司、微信小程序、關(guān)鍵詞優(yōu)化、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)