Heim > Artikel > Backend-Entwicklung > Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern
die Methode zum automatischen Laden des GO-Programms beim Ändern von 5 Dateien vorstellen. Ich hoffe, es wird Freunden in Not hilfreich sein!
Viele Menschen hoffen, beim Schreiben von GO den Effekt eines Echtzeit-Neuladens von Code (Hot Compilation) zu erzielen, insbesondere diejenigen, die es gewohnt sind, interpretierte Sprachen wie JavaScript, Python und Ruby zu verwenden Methoden zum Echtzeit-Neuladen von Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern-Programmen. In diesem Artikel wird davon ausgegangen, dass der Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern-Compiler installiert wurde und der PfadGOPATH/bin
zur Umgebungsvariablen PATH hinzugefügt wurde.
Bevor wir beginnen, erstellen wir zunächst einen einfachen Webserver, der den Antwortinhalt „Hello, World“ zurückgeben kann. package mainimport (
"net/http")func main() {
http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World"))
})
http.ListenAndServe(":5000", nil)}
GOPATH/bin
路径添加到PATH环境变量中。
在开始之前,我们先创建一个简单的web服务器,可以返回响应内容”Hello,World”。
go get -u github.com/cosmtrek/air
Air 是一个命令行程序,可以为Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern程序提供实时代码加载。
通过运行以下命令来安装Air。
# .air.conf # toml配置文件来源于 [Air](https://github.com/cosmtrek/air)# 工作区间 # .(当前目录)或绝对路径, 注意这些目录都在根目录下面.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"# 监听的文件扩展后缀列表。 include_ext = ["go", "tpl", "tmpl", "html"]# 忽略这些文件扩展名或目录。 exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]# 如果指定,则监听包含这些文件。 include_dir = []# 忽略文件列表.exclude_file = []# 如果文件修改太频繁,则不必在每次修改时都立刻触发构建,设置触发等待时间。 delay = 1000 # ms # 发生编译错误时,是否停止旧的二进制程序。 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
下一步,在使用项目的根目录中创建Air配置文件.air.conf
。
docker run -it --rm -w <working_dir> -v <project_folder>:<mount_point> -p <host_port>:<container_port> <image_name></image_name></container_port></host_port></mount_point></project_folder></working_dir>
配置是简单明了的,请根据你的项目情况去调整。
最后,不要使用常用的go run
命令来运行Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern程序,而应使用air
命令来启动程序。
这种方法需要使用docker,如果你没有安装,可以按照
我们仍将使用Air库,因此仍然需要Air配置文件。 如果你还没有,请创建一个配置文件。
Docker镜像cosmtrek/air
附带安装了Air命令,并且GOPATH环境变量设置为/go
。
我们只需要将我们的项目目录挂载到Docker容器的GOPATH中,并使用-p暴露需要使用的端口即可。 我们可以通过运行docker run命令来实现这一点:
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 /home/praveen/go/src/github.com/praveen001/live-reloading:/go/src/github.com/praveen001/live-reloading
解释:
使用-v参数将项目目录 /home/praveen/go/src/github.com/praveen001/live-reloading
挂载到容器里面的GOPATH中的目录/go/src/github.com/praveen001/live-reloading
。
-w /go/src/github.com/praveen001/live-reloading
使用-w
参数指定挂载目录成工作目录。
-p 5000:5000
Web服务器正在监听端口5000,因此需要使用-p
标志将容器端口5000暴露到主机端口5000。
go get github.com/codegangsta/gin
最后,指定docker镜像名称cosmtrek / air
。
Gin是另一个用于实时重新加载Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern应用程序的命令行程序。
通过运行以下命令来安装Gin。
gin --appPort 5000 --port 3000
而不是使用通常的go run main.go
命令运行应用程序,而是使用gin
命令。
就我而言,--appPort
参数告诉Gin监听端口5000,--port
参数告诉Gin代理监听端口3000端口
gin --appPort 5000 --port 3000 --excludeDir ./frontend
现在使用地址http://localhost:3000
访问Gin程序.
如果要排除监听那个目录可以使用--excludeDir
参数,例如:
npm install -g nodemon
如果你项使用Gin实现加载没有启动端口监听的程序,你们必须使用--immediate
参数。但是Gin仍然会去5000端口。
你可以在这找到所有受支持的参数Gin的Github.
Nodemon是另一个用于实时重新加载Node应用程序的命令行程序。 但是可以通过使用--exec
参数设置启动命令用于启动其他应用程序。
Nodemon需要安装Nodejs和NPM。 如果没有安装,可以按照nodejs的官方文档进行安装.
运行以下命令来安装nodemon:
nodemon --exec go run main.go --signal SIGTERM
现在,我们可以通过运行以下命令来使用Nodemon运行Web服务器:
go get github.com/pilu/fresh
如果要配置Nodemon,请在项目的根目录中创建配置文件nodemon.json
。 完整可用的示例配置文件
Fresh 是另一个GO实现的用于实时重新加载Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern的程序
安装Fresh
fresh
而不是使用常用的go run main.go
命令来运行应用程序,而是使用fresh
命令。
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:
要配置Fresh,需要在项目的根目录中创建一个配置文件runner.conf
Methode 1: Verwenden von Air
Als nächstes erstellen Sie die Air-Konfigurationsdatei .air.conf
im Stammverzeichnis Ihres Projekts.
go run
, um das Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern-Programm auszuführen. Verwenden Sie stattdessen den Befehl air
, um das Programm zu starten. 🎜🎜🎜🎜Methode 2: Docker zum Ausführen von Ari🎜🎜Diese Methode erfordert Docker. Wenn Sie es nicht installiert haben, können Sie folgen 🎜🎜Wir werden weiterhin die Air-Bibliothek verwenden, daher ist die Air-Konfigurationsdatei weiterhin erforderlich. Falls noch nicht geschehen, erstellen Sie bitte ein Profil. 🎜🎜Das Docker-Image cosmtrek/air
wird mit installiertem Air-Befehl geliefert und die Umgebungsvariable GOPATH ist auf /go
gesetzt. 🎜🎜Wir müssen nur unser Projektverzeichnis im GOPATH des Docker-Containers mounten und -p verwenden, um die Ports freizugeben, die wir verwenden müssen. Wir können dies erreichen, indem wir den Docker-Run-Befehl ausführen: 🎜rrreee🎜In meinem Fall musste ich den folgenden Befehl ausführen: 🎜rrreee🎜🎜Erklärung: 🎜🎜🎜Verwenden Sie den Parameter -v, um das Projektverzeichnis in /home/praveen zu ändern / go/src/github.com/praveen001/live-reloading wird im Verzeichnis /go/src/github.com/praveen001/live-reloading
im GOPATH im Container bereitgestellt . 🎜rrreee🎜Verwenden Sie den Parameter -w
, um das Mountverzeichnis als Arbeitsverzeichnis anzugeben. 🎜rrreee🎜Der Webserver überwacht Port 5000, daher muss das Flag -p
verwendet werden, um den Container-Port 5000 dem Host-Port 5000 zugänglich zu machen. 🎜rrreee🎜Geben Sie abschließend den Docker-Image-Namen cosmtrek/air
an. 🎜🎜🎜🎜Methode 3: Verwendung von Gin 🎜🎜Gin ist ein weiteres Befehlszeilenprogramm zum Live-Neuladen von Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern-Anwendungen. 🎜🎜Installieren Sie Gin, indem Sie den folgenden Befehl ausführen. 🎜rrreee🎜Anstatt den üblichen Befehl go run main.go
zum Ausführen der Anwendung zu verwenden, verwenden Sie den Befehl gin
. 🎜🎜In meinem Fall hat der Parameter --appPort
Gin angewiesen, auf Port 5000 zu lauschen, und der Parameter --port
hat Gin angewiesen, auf Port 3000 zu lauschen. 🎜rrreee🎜Jetzt Verwenden Sie die Adresse http://localhost:3000
Greifen Sie auf das Gin-Programm zu.🎜🎜Wenn Sie das Abhörverzeichnis ausschließen möchten, können Sie den Parameter --excludeDir
verwenden, z Beispiel: 🎜rrreee🎜Wenn Ihr Projekt Gin zum Implementieren des Ladens verwendet. Wenn kein Programm zum Starten des Port-Listenings vorhanden ist, müssen Sie den Parameter --immediate
verwenden. Aber Gin wird weiterhin zu Port 5000 gehen. 🎜🎜Alle unterstützten Parameter finden Sie in Gins Github. 🎜🎜🎜🎜Methode 4: Verwendung von Nodemon. 🎜🎜Nodemon ist ein weiteres Befehlszeilenprogramm zum Live-Neuladen von Node-Anwendungen. Der Startbefehl kann jedoch mithilfe des Parameters --exec
so eingestellt werden, dass andere Anwendungen gestartet werden. 🎜🎜Nodemon erfordert die Installation von Nodejs und NPM. Wenn es nicht installiert ist, können Sie es gemäß der offiziellen Dokumentation von nodejs installieren. 🎜🎜 Führen Sie den folgenden Befehl aus, um nodemon zu installieren: 🎜rrreee🎜 Jetzt können wir Nodemon verwenden, um den Webserver auszuführen, indem wir den folgenden Befehl ausführen: 🎜rrreee 🎜 Wenn Sie Nodemon konfigurieren möchten, erstellen Sie bitte die Konfigurationsdatei nodemon.json
im Stammverzeichnis des Projekts. Vollständige funktionierende Beispielkonfigurationsdatei🎜🎜🎜🎜Methode 5: Verwendung von Fresh🎜🎜Fresh ist eine weitere GO-Implementierung zum Live-Neuladen von Teilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern🎜🎜Install Fresh🎜rrreee🎜 anstelle der häufig verwendeten go run main .go
-Befehl zum Ausführen der Anwendung verwenden, verwenden Sie stattdessen den Befehl fresh
. 🎜rrreee🎜Um Fresh zu konfigurieren, müssen Sie eine Konfigurationsdatei runner.conf
im Stammverzeichnis des Projekts erstellen. 🎜🎜Dies ist eine Beispielkonfigurationsdatei. 🎜rrreee🎜🎜🎜 Zusammenfassung 🎜🎜 Es gibt viele andere Tools wie: 🎜Ursprüngliche Adresse: https://techinscribed.com/5-ways-to-live-reloading-go-applications/
Übersetzung Adresse: https://learnku.com/go/t/51189
Das obige ist der detaillierte Inhalt vonTeilen Sie 5 Möglichkeiten, Go-Programme automatisch neu zu laden, wenn sich Dateien ändern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!