Gin 项目引入热加载

打印 上一主题 下一主题

主题 925|帖子 925|积分 2775

目录

一、什么是热加载

热加载(Hot Reloading)是指在应用程序运行时,对代码进行修改后,系统能够自动重新加载这些修改,而无需停止和重新启动整个应用程序。这使得开发者能够在不中断应用程序运行的情况下进行代码的调试和修改。
热加载的主要目的是提高开发效率,减少开发过程中的重复操作,以便更快地验证和测试代码的修改。这对于大型项目和复杂框架的开发尤其有益,因为传统的停止-编译-启动的周期会消耗大量时间。
在不同的编程语言和框架中,热加载的实现方式可能有所不同。在Python中,像Flask和Django这样的Web框架通常通过监视文件系统的变化,并在检测到变化时重新加载相应的模块。在Java中,一些应用服务器和开发工具提供了热加载的功能,使得在不停止整个应用程序的情况下更新类文件成为可能。
总的来说,热加载是一种提高开发效率和用户体验的技术,允许开发者更快速地进行代码调试和修改。
二、Air

2.1 介绍

Air 是一个用于 Go 语言应用程序的快速热加载工具。它能够在代码修改后实时更新应用程序,提高开发效率。以下是对你提供的关于 Air 的信息的简要解释:
2.2 特性

特性:


  • 彩色日志输出: Air 提供了彩色的日志输出,使得日志更加直观和易读。
  • 自定义构建或二进制命令: 你可以自定义构建命令,以满足特定项目的需求。
  • 支持忽略子目录: 可以配置忽略特定的子目录,使得热加载过程更加灵活。
  • 启动后支持监听新目录: 在启动后,Air 支持监听新的目录,方便项目结构的更改。
  • 更好的构建过程: Air 提供更灵活的构建过程配置,包括自定义命令、文件扩展名的监听、延迟等。
2.3 相关文档

2.4 安装

推荐使用 install.sh
  1. # binary 文件会是在 $(go env GOPATH)/bin/air
  2. curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
  3. # 或者把它安装在 ./bin/ 路径下
  4. curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s
  5. air -v
复制代码
使用 go install

使用 Go 的版本为 1.16 或更高:
  1. go install github.com/cosmtrek/air@latest
复制代码
2.5 配置环境变量

首先将添加 alias air='~/go/bin/air' 到您的 .bashrc 或 .zshrc 后缀的文件,执行如下命令:
  1. echo "alias air='~/go/bin/air'" >> ~/.bashrc
复制代码
  1. echo "alias air='~/go/bin/air'" >> ~/.zshrc
复制代码
运行以下命令以使更改生效:
  1. source ~/.bashrc
复制代码
  1. source ~/.zshrc
复制代码
现在,您应该能够使用 air 命令了,使用如下命令验证:
  1. air -v
复制代码

2.6 使用

首先,进入你的项目文件夹
  1. cd /path/to/your_project
复制代码
运行以下命令初始化
  1. air init
复制代码
生成一个.air.toml 文件,内容解释如下,可以参考 air_example.toml 文件修改.
  1. # [Air](https://github.com/cosmtrek/air) 的 TOML 格式配置文件
  2. # 工作目录
  3. # 可以使用 "." 或绝对路径,但请注意以下目录必须在 root 下。
  4. root = "."
  5. tmp_dir = "tmp"
  6. [build]
  7. # 在每次构建之前运行的命令数组
  8. pre_cmd = ["echo 'hello air' > pre_cmd.txt"]
  9. # 普通的 shell 命令。您也可以使用 `make`。
  10. cmd = "go build -o ./tmp/main ."
  11. # 在 ^C 后运行的命令数组
  12. post_cmd = ["echo 'hello air' > post_cmd.txt"]
  13. # 从 `cmd` 产生的二进制文件。
  14. bin = "tmp/main"
  15. # 自定义二进制文件,可以在运行应用程序时设置环境变量。
  16. full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
  17. # 监视这些文件扩展名。
  18. include_ext = ["go", "tpl", "tmpl", "html"]
  19. # 忽略这些文件扩展名或目录。
  20. exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
  21. # 如果指定,监视这些目录。
  22. include_dir = []
  23. # 监视这些文件。
  24. include_file = []
  25. # 排除文件。
  26. exclude_file = []
  27. # 排除特定正则表达式。
  28. exclude_regex = ["_test\\.go"]
  29. # 排除未更改的文件。
  30. exclude_unchanged = true
  31. # 对于目录,跟随符号链接。
  32. follow_symlink = true
  33. # 此日志文件位于 tmp_dir 中。
  34. log = "air.log"
  35. # 对文件进行轮询以检测更改,而不是使用 fsnotify。
  36. poll = false
  37. # 轮询间隔(默认为最小间隔 500 毫秒)。
  38. poll_interval = 500 # 毫秒
  39. # 如果文件更改太频繁,无需每次触发构建。
  40. delay = 0 # 毫秒
  41. # 在构建错误发生时停止运行旧的二进制文件。
  42. stop_on_error = true
  43. # 在终止进程之前发送中断信号(Windows 不支持此功能)。
  44. send_interrupt = false
  45. # 发送中断信号后的延迟。
  46. kill_delay = 500 # 纳秒
  47. # 是否重新运行二进制文件。
  48. rerun = false
  49. # 每次执行之后的延迟。
  50. rerun_delay = 500
  51. # 运行二进制文件(bin/full_bin)时添加附加参数。将运行 './tmp/main hello world'。
  52. args_bin = ["hello", "world"]
  53. [log]
  54. # 显示日志时间
  55. time = false
  56. # 仅显示主日志(禁用监视器、构建和运行器)
  57. main_only = false
  58. [color]
  59. # 自定义每个部分的颜色。如果找不到颜色,则使用原始应用程序日志。
  60. main = "magenta"
  61. watcher = "cyan"
  62. build = "yellow"
  63. runner = "green"
  64. [misc]
  65. # 在退出时删除 tmp 目录
  66. clean_on_exit = true
  67. [screen]
  68. clear_on_rebuild = true
  69. keep_scroll = true
复制代码
现在你只需执行 air 命令启动热加载,无需添加额外的变量,它就能使用 .air.toml 文件中的配置了。
  1. air  
复制代码
启动热加载 带打印日志
  1. air -d
复制代码
指定配置文件
  1. # 优先在当前路径查找 `.air.toml` 后缀的文件,如果没有找到,则使用默认的
  2. air -c .air.toml
复制代码

三、Fresh

3.1 介绍

Fresh 是一个命令行工具,旨在提供对 Go 语言应用程序的热加载支持。每当保存 Go 文件或模板文件时,Fresh 将重新生成并重新启动 Web 应用程序。它监视文件事件,每次创建、修改或删除文件时都会触发重新生成和重启应用程序的过程。如果 go build 返回错误,错误信息将被记录在 tmp 文件夹中。
3.2 相关文档

3.3 安装与使用

打开任意一处终端,用 go env 命令查看,如果 GO111MODULE=auto,将这一行改成 GO111MODULE=on。

安装配置
  1. # 进入你的项目目录
  2. cd /your_project
  3. # 使用go install 拉取fresh
  4. go install github.com/pilu/fresh@latest
  5. # 如果你没有go mod ,执行命令初始化
  6. go mod init <你的项目名称>
  7. # 将依赖添加到你的项目中
  8. go get github.com/pilu/fresh
复制代码
最后启动:
  1. fresh
复制代码

四、bee

4.1 介绍

Bee 是一个用于 Go 语言应用程序的开发工具,它提供了一些方便的功能,包括热加载、代码生成、快速开发等。Bee 主要用于支持 Beego 框架的应用程序开发,但它也可以独立使用于其他 Go 项目。
4.2 相关文档

Bee 的相关文档包括官方文档和其他社区资源。你可以在以下位置找到有关 Bee 的详细信息:
4.3 安装与使用


  • 进入你的项目目录,注意:使用bee 项目必须要在GOPATH目录下
  1. cd /your_project
复制代码

  • 使用以下命令安装 Bee:
  1. go install github.com/beego/bee/v2@latest
复制代码

  • 添加到环境变量
  1. export PATH=$PATH:<your_main_gopath>/bin
复制代码

  • 安装完成后,你可以使用以下命令检查 Bee 是否正确安装:
  1. bee version
复制代码


  • 启动
  1. bee run
复制代码
4.4 基本命令

Bee 提供了多种命令,这些命令在开发的各个阶段都有帮助。 顶级命令包括:
  1. version:显示当前 Bee 工具的版本信息。
  2. migrate:运行数据库迁移操作。
  3. api:创建一个 Beego API 应用程序。
  4. bale:将非 Go 文件转换为 Go 源代码文件。
  5. fix:通过使其兼容 Beego 的新版本来修复你的应用程序。
  6. pro:源代码生成器。
  7. dlv:使用 Delve 启动调试会话。
  8. dockerize:为你的 Beego 应用程序生成 Dockerfile 和 docker-compose.yaml。
  9. generate:源代码生成器。
  10. hprose:基于 Hprose 和 Beego 框架创建一个 RPC 应用程序。
  11. new:创建一个 Beego 应用程序。
  12. pack:将 Beego 应用程序压缩成一个单一文件。
  13. rs:运行定制的脚本。
  14. run:通过启动本地开发服务器运行应用程序。
  15. server:在指定端口上通过 HTTP 提供静态内容服务。
  16. update:更新 Bee 工具。
复制代码
五、gowatch

5.1 介绍

gowatch 是一个用于 Go 语言应用程序的热加载工具,它能够在代码发生变化时自动重新编译和运行应用程序,从而实现实时的热加载。gowatch 可以用于加速开发过程,避免手动停止和启动应用程序。
5.2 相关文档

gowatch 的相关文档通常可以在其 GitHub 仓库或其他社区资源中找到。以下是一些常见的文档链接:
5.3 安装与使用


  • 进入到你的项目目录
  1. cd /path/to/myapp
复制代码

  • 使用以下命令安装 gowatch:
  1. go install github.com/silenceper/gowatch@latest
  2. go get -u github.com/silenceper/gowatch
复制代码

  • 添加到 ~/.bashrc 或 ~/.bash_profile 文件中的 PATH 环境变量
  • 在你的项目目录下执行以下命令启动 gowatch:
  1. gowatch
复制代码

5.4 基本命令与参数

安装完成后可以直接使用gowatch命令,命令行参数如下:

  • -o:非必需,指定构建的目标文件路径。
  • -p:非必需,指定要构建的包(也可以是单个文件)。
  • -args:非必需,指定程序运行时的参数,例如:-args='-host=:8080, -name=demo'。
  • -v:非必需,显示 gowatch 版本信息。
  • -l:非必需,指定日志级别,默认为 debug。
  • -h:非必需,显示用法信息。
5.5. 生成配置文件

您可以使用运行以下命令的默认设置将gowatch. yml配置文件初始化到当前目录。运行如下命令:
  1. gowatch init
复制代码
大部分情况下,不需要更改配置,直接执行gowatch命令就能满足的大部分的需要,但是也提供了一些配置用于自定义,在执行目录下创建gowatch.yml文件:
  1. # gowatch.yml 配置示例
  2. # 当前目录执行下生成的可执行文件的名字,默认是当前目录名
  3. appname: "test"
  4. # 指定编译后的目标文件目录
  5. output: /bin/demo
  6. # 需要追加监听的文件名后缀,默认只有'.go'文件
  7. watch_exts:
  8.     - .yml
  9. # 需要监听的目录,默认只有当前目录
  10. watch_paths:
  11.     - ../pk
  12. # 在执行命令时,需要增加的其他参数
  13. cmd_args:
  14.     - arg1=val1
  15. # 在构建命令时,需要增加的其他参数
  16. build_args:
  17.     - -race
  18. # 需要增加环境变量,默认已加载当前环境变量
  19. envs:
  20.     - a=b
  21. # 是否监听 ‘vendor’ 文件夹下的文件改变
  22. vendor_watch: false
  23. # 不需要监听的目录名字
  24. excluded_paths:
  25.     - path
  26. # main 包路径,也可以是单个文件,多个文件使用逗号分隔
  27. build_pkg: ""
  28. # build tags
  29. build_tags: ""
  30. # 是否禁止自动运行
  31. disable_run: false
复制代码
六、gin

6.1 介绍

gin是用于实时重新加载Go Web应用程序的简单命令行实用程序。只需gin在您的应用程序目录中运行,您的网络应用程序将 gin作为代理提供。gin检测到更改后,将自动重新编译您的代码。您的应用在下次收到HTTP请求时将重新启动。
gin 坚持“沉默就是黄金”的原则,因此,只有在出现编译器错误或在错误发生后成功进行编译时,它才会抱怨。
6.2 相关文档

6.3 安装与使用

假设您有一个工作的Go环境并且GOPATH/bin在您的PATH中,gin安装起来轻而易举:
  1. go install github.com/codegangsta/gin@latest
复制代码
然后验证gin是否正确安装:
  1. gin help
复制代码
使用
  1. gin run main.go
复制代码
6.4 命令与参数
  1. --laddr value, -l value       代理服务器的监听地址
  2. --port value, -p value        代理服务器的端口(默认:3000)
  3. --appPort value, -a value     Go web 服务器的端口(默认:3001)
  4. --bin value, -b value         生成的二进制文件的名称(默认:"gin-bin")
  5. --path value, -t value        监视文件的路径(默认:".")
  6. --build value, -d value       构建文件的路径(默认与 --path 相同)
  7. --excludeDir value, -x value  要排除的相对目录
  8. --immediate, -i               构建后立即运行服务器
  9. --all                         每次任何文件更改时重新加载,而不仅仅在 .go 文件更改时重新加载
  10. --godep, -g                   在构建时使用 godep
  11. --buildArgs value             附加的 go 构建参数
  12. --certFile value              TLS 证书
  13. --keyFile value               TLS 证书密钥
  14. --logPrefix value             设置自定义日志前缀
  15. --notifications               启用桌面通知
  16. --help, -h                    显示帮助信息
  17. --version, -v                 打印版本信息
复制代码
七、realize(不推荐,已经好久没维护了)

7.1 介绍

Realize 是一个用于 Golang 的实时重载和任务运行器。它具有以下主要功能:

  • 高性能实时刷新。
  • 同时管理多个项目。
  • 通过自定义扩展名和路径观察文件。
  • 支持所有 Go 命令。
  • 在不同的 Go 版本之间切换。
  • 支持项目的自定义环境变量。
  • 在文件更改前后或全局执行自定义命令。
  • 将日志和错误导出到外部文件。
  • 分步项目初始化。
  • 重新设计的面板,显示构建错误,控制台输出和警告。
7.2 相关文档

7.3 安装与使用


  • 进入到你的项目目录
  1. cd /path/to/myapp
复制代码

  • 使用以下命令安装 gowatch:
  1. go install github.com/oxequa/realize@latest
  2. go get github.com/oxequa/realize
复制代码
首先进行初始化,默认配置即可:
  1. realize init
复制代码
执行项目:
  1. realize start
复制代码
添加命令:
  1. realize add
复制代码
删除命令:
  1. realize init
复制代码
7.4 命令参数

选项:
  1. --name="name"               -> 根据现有配置的名称运行
  2. --path="realize/server"     -> 自定义路径(如果未指定,将采用工作目录名称)
  3. --generate                  -> 启用 go generate
  4. --fmt                       -> 启用 go fmt
  5. --test                      -> 启用 go test
  6. --vet                       -> 启用 go vet
  7. --install                   -> 启用 go install
  8. --build                     -> 启用 go build
  9. --run                       -> 启用 go run
  10. --server                    -> 启用 Web 服务器
  11. --open                      -> 在默认浏览器中打开 Web UI
  12. --no-config                 -> 忽略现有配置/跳过创建新配置
复制代码
示例:
  1. $ realize start
  2. $ realize start --path="mypath"
  3. $ realize start --name="realize" --build
  4. $ realize start --path="realize" --run --no-config
  5. $ realize start --install --test --fmt --no-config
  6. $ realize start --path="/Users/username/go/src/github.com/oxequa/realize-examples/coin/"
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表