让我们使用Air来进行Golang的热重载

首先

我在使用Go语言开发时,每次没有热重载功能就不得不关闭容器,这真是很麻烦。后来查了一下,似乎可以通过引入Air来实现热重载功能,我将把它的安装方法记录下来作为备忘。

FROM golang:1.18-alpine

RUN apk update &&  apk add git
RUN go install github.com/cosmtrek/air@v1.29.0
WORKDIR /app

CMD ["air", "-c", ".air.toml"]

请将上述的.air.toml文件暂时直接带来。如果您想要自定义,请尝试进行各种自定义。

接下来,我们将docker-compose.yml文件写成以下内容。

version: '3.8'
services:
  server:
    build:
      context: ./server
      dockerfile: Dockerfile.server
    container_name: websocket_server
    ports:
      - "8080:8080"
    volumes:
      - ./server:/app

为了确保实时重新加载正常工作,我们将放置一个样本文件。

package main

import (
	"fmt"
	"net/http"
)

func say_hello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, World!")
}

func main() {
	http.HandleFunc("/", say_hello)
	http.ListenAndServe(":8080", nil)
}

文件结构应该如下所示。

$ tree
.
├── README.md
├── docker-compose.yml
└── server
    ├── Dockerfile.server
    ├── go.mod 
    └── main.go
      
```shell
上記の状態でコンテナを起動し、以下のような画面になればAirの導入は完了です。
```shell
$ docker-compose build
$ docker-compose up server
docker-compose up server
[+] Running 1/1
 ⠿ Container websocket_server  Created                                     0.0s
Attaching to websocket_server
websocket_server  |
websocket_server  |   __    _   ___
websocket_server  |  / /\  | | | |_)
websocket_server  | /_/--\ |_| |_| \_ , built with Go
websocket_server  |
websocket_server  | mkdir /app/tmp
websocket_server  | watching .
websocket_server  | !exclude tmp
websocket_server  | building...
websocket_server  | running...

编辑main.go文件后,如果”Hello, World!”被改为”Hello, abemaru!”,则说明热加载设置已成功完成确认。

package main

import (
	"fmt"
	"net/http"
)

func say_hello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, abemaru!") // ここを変更
}

func main() {
	http.HandleFunc("/", say_hello)
	http.ListenAndServe(":8080", nil)
}

顺便提一下,在终端等地方查看air的日志时,可以正确地检测到 main.go 文件的变更。

websocket_server  | main.go has changed
websocket_server  | building...
websocket_server  | running...

最后

既然有 live reload,开发就会变得更顺利,所以我们应该尽快进行开发。

请参考

    • https://zenn.dev/ajapa/articles/bc399c7e4c0def

 

    https://qiita.com/sogafish/items/69cd70ec2660a8335bfc
广告
将在 10 秒后关闭
bannerAds