小老弟

V1

2023/04/16阅读:61主题:默认主题

go: 在使用gin 框架时,如何进行热加载

前言

我们在使用gin开发web项目的时候,传统的运行方式:使用go run app.go 去运行自己的项目。但是在开发过程中,每改一次代码,都要进行一次重启,那在go 中如何使用热加载呢?

什么是热加载

热加载在开发过程中,改动代码或新增代码时自动加载更新内容并重新发布。热加载有以下用处:

  • 自动加载更新内容
  • 自动发布更新内容
  • 提高开发效率,专注业务开发,而不需要反复重启应用进行调试接口

安装fresh

Fresh 是一个命令行工具,它会在您每次保存 Go 或模板文件时构建和(重新)启动您的 Web 应用程序。

如果您使用的 Web 框架支持 Fresh runner,它会在您的浏览器上显示构建错误。

传送门:fresh github

安装fresh

前置条件:必须有go环境。

查看go 版本:

go version
go version go1.18.1 darwin/amd64

安装 fresh

go get github.com/pilu/fresh

使用fresh 进行热加载

在传统的开发中,运行go 程序,是通过go run main.go 命令运行的,使用了fresh之后,运行方式有所变更,直接命令 fresh 就可以了。

chatgin % fresh
22:33:52 runner      | InitFolders
22:33:52 runner      | mkdir ./tmp
22:33:52 runner      | mkdir ./tmp: file exists
22:33:52 watcher     | Watching .
22:33:52 watcher     | Watching evn
22:33:52 watcher     | Watching src
22:33:52 watcher     | Watching src/authenticate
22:33:52 watcher     | Watching src/common
22:33:52 watcher     | Watching src/config
22:33:52 watcher     | Watching src/interfaces
22:33:52 watcher     | Watching src/module
22:33:52 watcher     | Watching src/router
22:33:52 watcher     | Watching src/service
22:33:52 watcher     | Watching src/tables
22:33:52 watcher     | Watching src/utils
22:33:52 main        | Waiting (loop 1)...
22:33:52 main        | receiving first event /
22:33:52 main        | sleeping for 600 milliseconds
22:33:53 main        | flushing events
22:33:53 main        | Started! (38 Goroutines)
22:33:53 main        | remove tmp/runner-build-errors.log: no such file or directory
22:33:53 build       | Building...
22:33:53 runner      | Running...
22:33:53 main        | --------------------
22:33:53 main        | Waiting (loop 2)...
22:33:53 app         | [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

22:33:53 app         | [GIN-debug] POST   /auth/login               --> org.chatgin/src/router.Router.func1 (5 handlers)
22:33:53 app         | [GIN-debug] POST   /user/register            --> org.chatgin/src/router.Router.func2 (5 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8080

问题处理

安装错误

在Mac 上安装fresh 时,发生以下错误:

xxx@MacBook-Pro ~ % go get github.com/pilu/fresh
package golang.org/x/sys/unix: unrecognized import path "golang.org/x/sys/unix": https fetch: Get "https://golang.org/x/sys/unix?go-get=1": dial tcp 142.251.43.17:443: i/o timeout

当出现上面的问题时,按提示要求先import golang.org/x/sys/unix,如何在$GOPATH 下导入这个依赖呢?

# 进入$GOPATH目录
cd $GOPATH/src
# 创建 golang.org/x 目录
mkdir -p golang.org/x
# 进入 golang.org/x
cd golang.org/x
# 下载 源码
git clone https://github.com/golang/sys.git

等待下载完成,就完成了golang.org/x/sys/unix的导入,然后在$GOPATH 重新运行go get github.com/pilu/fresh 就可以了。

fresh 运行:command not found fresh

设置环境变量:

# 修改环境变量
vim ~/.zshrc

#
 add config
export GOROOT=/usr/local/go
export GOPATH=/Users/xxxx/xxxx/go_workspace
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

#
 让设置生效
source ~/.zshrc

分类:

后端

标签:

后端

作者介绍

小老弟
V1