파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유

藏色散人
풀어 주다: 2020-11-03 15:19:58
앞으로
2873명이 탐색했습니다.

에서 5개 파일을 변경할 때 GO 프로그램을 자동으로 로드하는 방법을 공유하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

많은 사람들이 GO를 작성할 때 실시간 코드 리로딩(핫 컴파일) 효과를 기대하고 있으며, 특히 JavaScript, Python, Ruby와 같은 해석 언어 사용에 익숙한 사람들은 이 기사에서 5가지를 소개합니다. 파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유 프로그램을 실시간으로 다시 로드하는 방법 방법입니다.

파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유

이 글에서는 파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유 컴파일러가 설치되어 있고 GOPATH/bin 경로가 PATH 환경 변수에 추가되었다고 가정합니다.

시작하기 전에 먼저 "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)}
로그인 후 복사
GOPATH/bin路径添加到PATH环境变量中。

在开始之前,我们先创建一个简单的web服务器,可以返回响应内容”Hello,World”。

go get -u github.com/cosmtrek/air
로그인 후 복사

Method 1: 使用Air

Air 是一个命令行程序,可以为파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유程序提供实时代码加载。

通过运行以下命令来安装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命令来运行파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유程序,而应使用air命令来启动程序。

Method 2: docker运行Ari

这种方法需要使用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

Method 3: 使用Gin

Gin是另一个用于实时重新加载파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유应用程序的命令行程序。

通过运行以下命令来安装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.

Method 4: 使用Nodemon

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。 完整可用的示例配置文件

Method 5: 使用Fresh

Fresh 是另一个GO实现的用于实时重新加载파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유的程序

安装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

방법 1: Air 사용

Air는 파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유 프로그램에 실시간 코드 로딩을 ​​제공할 수 있는 명령줄 프로그램입니다. 다음 명령을 실행하여 Air를 설치합니다.

rrreee

다음으로 프로젝트의 루트 디렉터리에 Air 구성 파일 .air.conf를 만듭니다.

rrreee🎜구성이 간단하고 명확하니 프로젝트 상황에 맞게 조정해주세요. 🎜🎜마지막으로 파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유 프로그램을 실행하기 위해 일반적으로 사용되는 go run 명령을 사용하지 말고, 대신 air 명령을 사용하여 프로그램을 시작하세요. 🎜🎜🎜🎜방법 2: Ari를 실행하는 Docker🎜🎜이 방법에는 docker가 필요합니다. 설치하지 않은 경우 따라갈 수 있습니다. 🎜🎜계속 Air 라이브러리를 사용할 것이므로 Air 구성 파일이 필요합니다. 아직 프로필을 작성하지 않으셨다면 프로필을 작성해 주세요. 🎜🎜Docker 이미지 cosmtrek/air는 Air 명령이 설치된 상태로 제공되며 GOPATH 환경 변수는 /go로 설정됩니다. 🎜🎜프로젝트 디렉터리를 Docker 컨테이너의 GOPATH에 마운트하고 -p를 사용하여 사용해야 하는 포트를 노출하기만 하면 됩니다. docker run 명령을 실행하면 이 작업을 수행할 수 있습니다. 🎜rrreee🎜제 경우에는 다음 명령을 실행해야 했습니다. 🎜rrreee🎜🎜설명: 🎜🎜🎜-v 매개변수를 사용하여 프로젝트 디렉터리를 /home/praveen으로 변경합니다. / go/src/github.com/praveen001/live-reloading은 컨테이너 내부 GOPATH의 /go/src/github.com/praveen001/live-reloading 디렉토리에 마운트됩니다. . 🎜rrreee🎜마운팅 디렉터리를 작업 디렉터리로 지정하려면 -w 매개변수를 사용하세요. 🎜rrreee🎜웹 서버는 포트 5000에서 수신 대기하므로 -p 플래그를 사용하여 컨테이너 포트 5000을 호스트 포트 5000에 노출해야 합니다. 🎜rrreee🎜마지막으로 도커 이미지 이름 cosmtrek/air를 지정합니다. 🎜🎜🎜🎜방법 3: Gin 사용 🎜🎜Gin은 파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유 애플리케이션을 실시간으로 다시 로드하기 위한 또 다른 명령줄 프로그램입니다. 🎜🎜다음 명령을 실행하여 Gin을 설치합니다. 🎜rrreee🎜일반적인 go run main.go 명령을 사용하여 애플리케이션을 실행하는 대신 gin 명령을 사용하세요. 🎜🎜제 경우 --appPort 매개변수는 Gin에게 포트 5000에서 수신하도록 지시했고 --port 매개변수는 Gin에게 포트 3000에서 수신하도록 지시했습니다. 🎜rrreee🎜이제 다음을 사용하세요. 주소 http://localhost:3000Gin 프로그램에 액세스하세요.🎜🎜청취 디렉토리를 제외하려면 예를 들어 --excludeDir 매개변수를 사용할 수 있습니다. : 🎜rrreee🎜프로젝트에서 Gin을 사용하여 로딩을 구현하는 경우 포트 수신 대기를 시작할 프로그램이 없는 경우 --immediate 매개변수를 사용해야 합니다. 그러나 Gin은 여전히 ​​포트 5000으로 이동합니다. 🎜🎜Gin의 Github에서 지원되는 모든 매개변수를 찾을 수 있습니다. 🎜🎜🎜🎜방법 4: Nodemon 사용 🎜🎜Nodemon은 Node 애플리케이션을 실시간으로 다시 로드하는 또 다른 명령줄 프로그램입니다. 그러나 --exec 매개변수를 사용하여 다른 응용 프로그램을 시작하도록 시작 명령을 설정할 수 있습니다. 🎜🎜Nodemon에는 Nodejs와 NPM이 설치되어 있어야 합니다. 설치되어 있지 않은 경우 nodejs 공식 문서에 따라 설치할 수 있습니다. 🎜🎜 다음 명령을 실행하여 nodemon을 설치합니다. 🎜rrreee🎜 이제 다음 명령을 실행하여 Nodemon을 사용하여 웹 서버를 실행할 수 있습니다. 🎜 Nodemon을 구성하려면 프로젝트 루트 디렉터리에 nodemon.json 구성 파일을 생성하세요. 전체 작업 예제 구성 파일🎜🎜🎜🎜방법 5: Fresh🎜🎜Fresh를 사용하는 것은 일반적으로 사용되는 go run main .go를 사용하는 대신 파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유🎜🎜Install Fresh🎜rrreee🎜를 실시간으로 다시 로드하기 위한 또 다른 GO 구현입니다. > 명령을 사용하여 애플리케이션을 실행하려면 fresh 명령을 대신 사용하세요. 🎜rrreee🎜Fresh를 구성하려면 프로젝트 루트 디렉터리에 runner.conf 구성 파일을 만들어야 합니다. 🎜🎜샘플 구성 파일입니다. 🎜rrreee🎜🎜🎜 요약 🎜🎜 다음과 같은 다른 도구도 많이 있습니다. 🎜
  • Facebook의 Watchman
  • Realize
  • Reflex
  • 맞춤형 솔루션까지

원본 주소: https://techinscribed.com/5-ways-to-live-reloading-go-applications/

번역 주소: https://learnku.com/go/t/51189

위 내용은 파일이 변경될 때 Go 프로그램을 자동으로 다시 로드하는 5가지 방법 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿