Gin 项目引入热加载

news2024/10/6 10:34:25

Gin 项目引入热加载

文章目录

  • Gin 项目引入热加载
    • 一、什么是热加载
    • 二、Air
      • 2.1 介绍
      • 2.2 特性
      • 特性:
      • 2.3 相关文档
      • 2.4 安装
        • 推荐使用 install.sh
        • 使用 `go install`
      • 2.5 配置环境变量
      • 2.6 使用
    • 三、Fresh
      • 3.1 介绍
      • 3.2 相关文档
      • 3.3 安装与使用
    • 四、bee
      • 4.1 介绍
      • 4.2 相关文档
      • 4.3 安装与使用
      • 4.4 基本命令
    • 五、gowatch
      • 5.1 介绍
      • 5.2 相关文档
      • 5.3 安装与使用
      • 5.4 基本命令与参数
      • 5.5. 生成配置文件
    • 六、gin
      • 6.1 介绍
      • 6.2 相关文档
      • 6.3 安装与使用
      • 6.4 命令与参数
    • 七、realize(不推荐,已经好久没维护了)
      • 7.1 介绍
      • 7.2 相关文档
      • 7.3 安装与使用
      • 7.4 命令参数

一、什么是热加载

热加载(Hot Reloading)是指在应用程序运行时,对代码进行修改后,系统能够自动重新加载这些修改,而无需停止和重新启动整个应用程序。这使得开发者能够在不中断应用程序运行的情况下进行代码的调试和修改。

热加载的主要目的是提高开发效率,减少开发过程中的重复操作,以便更快地验证和测试代码的修改。这对于大型项目和复杂框架的开发尤其有益,因为传统的停止-编译-启动的周期会消耗大量时间。

在不同的编程语言和框架中,热加载的实现方式可能有所不同。在Python中,像Flask和Django这样的Web框架通常通过监视文件系统的变化,并在检测到变化时重新加载相应的模块。在Java中,一些应用服务器和开发工具提供了热加载的功能,使得在不停止整个应用程序的情况下更新类文件成为可能。

总的来说,热加载是一种提高开发效率和用户体验的技术,允许开发者更快速地进行代码调试和修改。

二、Air

2.1 介绍

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

2.2 特性

特性:

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

2.3 相关文档

  • github地址:https://github.com/cosmtrek/air
  • 中文文档:https://github.com/cosmtrek/air/blob/master/README-zh_cn.md

2.4 安装

推荐使用 install.sh
# binary 文件会是在 $(go env GOPATH)/bin/air
curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

# 或者把它安装在 ./bin/ 路径下
curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s

air -v
使用 go install

使用 Go 的版本为 1.16 或更高:

go install github.com/cosmtrek/air@latest

2.5 配置环境变量

首先将添加 alias air='~/go/bin/air' 到您的 .bashrc.zshrc 后缀的文件,执行如下命令:

echo "alias air='~/go/bin/air'" >> ~/.bashrc

echo "alias air='~/go/bin/air'" >> ~/.zshrc

运行以下命令以使更改生效:

source ~/.bashrc

source ~/.zshrc

现在,您应该能够使用 air 命令了,使用如下命令验证:

air -v

2.6 使用

首先,进入你的项目文件夹

cd /path/to/your_project

运行以下命令初始化

air init

生成一个.air.toml 文件,内容解释如下,可以参考 air_example.toml 文件修改.

# [Air](https://github.com/cosmtrek/air) 的 TOML 格式配置文件

# 工作目录
# 可以使用 "." 或绝对路径,但请注意以下目录必须在 root 下。
root = "."
tmp_dir = "tmp"

[build]
# 在每次构建之前运行的命令数组
pre_cmd = ["echo 'hello air' > pre_cmd.txt"]
# 普通的 shell 命令。您也可以使用 `make`。
cmd = "go build -o ./tmp/main ."
# 在 ^C 后运行的命令数组
post_cmd = ["echo 'hello air' > post_cmd.txt"]
# 从 `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 = []
# 监视这些文件。
include_file = []
# 排除文件。
exclude_file = []
# 排除特定正则表达式。
exclude_regex = ["_test\\.go"]
# 排除未更改的文件。
exclude_unchanged = true
# 对于目录,跟随符号链接。
follow_symlink = true
# 此日志文件位于 tmp_dir 中。
log = "air.log"
# 对文件进行轮询以检测更改,而不是使用 fsnotify。
poll = false
# 轮询间隔(默认为最小间隔 500 毫秒)。
poll_interval = 500 # 毫秒
# 如果文件更改太频繁,无需每次触发构建。
delay = 0 # 毫秒
# 在构建错误发生时停止运行旧的二进制文件。
stop_on_error = true
# 在终止进程之前发送中断信号(Windows 不支持此功能)。
send_interrupt = false
# 发送中断信号后的延迟。
kill_delay = 500 # 纳秒
# 是否重新运行二进制文件。
rerun = false
# 每次执行之后的延迟。
rerun_delay = 500
# 运行二进制文件(bin/full_bin)时添加附加参数。将运行 './tmp/main hello world'。
args_bin = ["hello", "world"]

[log]
# 显示日志时间
time = false
# 仅显示主日志(禁用监视器、构建和运行器)
main_only = false

[color]
# 自定义每个部分的颜色。如果找不到颜色,则使用原始应用程序日志。
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
# 在退出时删除 tmp 目录
clean_on_exit = true

[screen]
clear_on_rebuild = true
keep_scroll = true

现在你只需执行 air 命令启动热加载,无需添加额外的变量,它就能使用 .air.toml 文件中的配置了。

air  

启动热加载 带打印日志

 air -d

指定配置文件

# 优先在当前路径查找 `.air.toml` 后缀的文件,如果没有找到,则使用默认的
air -c .air.toml

三、Fresh

3.1 介绍

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

3.2 相关文档

  • github地址:https://github.com/gravityblast/fresh

3.3 安装与使用

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

安装配置

# 进入你的项目目录
cd /your_project
# 使用go install 拉取fresh
go install github.com/pilu/fresh@latest
# 如果你没有go mod ,执行命令初始化
go mod init <你的项目名称>
# 将依赖添加到你的项目中
go get github.com/pilu/fresh

最后启动:

fresh

四、bee

4.1 介绍

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

4.2 相关文档

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

  • GitHub 仓库:https://github.com/beego/bee

4.3 安装与使用

  1. 进入你的项目目录,注意:使用bee 项目必须要在GOPATH目录下
cd /your_project
  1. 使用以下命令安装 Bee:
go install github.com/beego/bee/v2@latest
  1. 添加到环境变量
export PATH=$PATH:<your_main_gopath>/bin
  1. 安装完成后,你可以使用以下命令检查 Bee 是否正确安装:
bee version

  1. 启动
bee run

4.4 基本命令

Bee 提供了多种命令,这些命令在开发的各个阶段都有帮助。 顶级命令包括:

version:显示当前 Bee 工具的版本信息。

migrate:运行数据库迁移操作。

api:创建一个 Beego API 应用程序。

bale:将非 Go 文件转换为 Go 源代码文件。

fix:通过使其兼容 Beego 的新版本来修复你的应用程序。

pro:源代码生成器。

dlv:使用 Delve 启动调试会话。

dockerize:为你的 Beego 应用程序生成 Dockerfile 和 docker-compose.yaml。

generate:源代码生成器。

hprose:基于 Hprose 和 Beego 框架创建一个 RPC 应用程序。

new:创建一个 Beego 应用程序。

pack:将 Beego 应用程序压缩成一个单一文件。

rs:运行定制的脚本。

run:通过启动本地开发服务器运行应用程序。

server:在指定端口上通过 HTTP 提供静态内容服务。

update:更新 Bee 工具。

五、gowatch

5.1 介绍

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

5.2 相关文档

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

  • GitHub 仓库:https://github.com/silenceper/gowatch

5.3 安装与使用

  1. 进入到你的项目目录
cd /path/to/myapp
  1. 使用以下命令安装 gowatch
go install github.com/silenceper/gowatch@latest
go get -u github.com/silenceper/gowatch
  1. 添加到 ~/.bashrc 或 ~/.bash_profile 文件中的 PATH 环境变量
  2. 在你的项目目录下执行以下命令启动 gowatch
gowatch

5.4 基本命令与参数

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

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

5.5. 生成配置文件

您可以使用运行以下命令的默认设置将gowatch. yml配置文件初始化到当前目录。运行如下命令:

gowatch init

大部分情况下,不需要更改配置,直接执行gowatch命令就能满足的大部分的需要,但是也提供了一些配置用于自定义,在执行目录下创建gowatch.yml文件:

# gowatch.yml 配置示例

# 当前目录执行下生成的可执行文件的名字,默认是当前目录名
appname: "test"
# 指定编译后的目标文件目录
output: /bin/demo
# 需要追加监听的文件名后缀,默认只有'.go'文件
watch_exts:
    - .yml
# 需要监听的目录,默认只有当前目录
watch_paths:
    - ../pk
# 在执行命令时,需要增加的其他参数
cmd_args:
    - arg1=val1
# 在构建命令时,需要增加的其他参数
build_args:
    - -race
# 需要增加环境变量,默认已加载当前环境变量
envs:
    - a=b
# 是否监听 ‘vendor’ 文件夹下的文件改变
vendor_watch: false
# 不需要监听的目录名字
excluded_paths:
    - path
# main 包路径,也可以是单个文件,多个文件使用逗号分隔
build_pkg: ""
# build tags
build_tags: ""

# 是否禁止自动运行
disable_run: false

六、gin

6.1 介绍

gin是用于实时重新加载Go Web应用程序的简单命令行实用程序。只需gin在您的应用程序目录中运行,您的网络应用程序将 gin作为代理提供。gin检测到更改后,将自动重新编译您的代码。您的应用在下次收到HTTP请求时将重新启动。

gin 坚持“沉默就是黄金”的原则,因此,只有在出现编译器错误或在错误发生后成功进行编译时,它才会抱怨。

6.2 相关文档

  • GitHub 地址:https://github.com/codegangsta/gin

6.3 安装与使用

假设您有一个工作的Go环境并且GOPATH/bin在您的PATH中,gin安装起来轻而易举:

go install github.com/codegangsta/gin@latest

然后验证gin是否正确安装:

gin help

使用

gin run main.go

6.4 命令与参数

--laddr value, -l value       代理服务器的监听地址
--port value, -p value        代理服务器的端口(默认:3000)
--appPort value, -a value     Go web 服务器的端口(默认:3001)
--bin value, -b value         生成的二进制文件的名称(默认:"gin-bin"--path value, -t value        监视文件的路径(默认:"."--build value, -d value       构建文件的路径(默认与 --path 相同)
--excludeDir value, -x value  要排除的相对目录
--immediate, -i               构建后立即运行服务器
--all                         每次任何文件更改时重新加载,而不仅仅在 .go 文件更改时重新加载
--godep, -g                   在构建时使用 godep
--buildArgs value             附加的 go 构建参数
--certFile value              TLS 证书
--keyFile value               TLS 证书密钥
--logPrefix value             设置自定义日志前缀
--notifications               启用桌面通知
--help, -h                    显示帮助信息
--version, -v                 打印版本信息

七、realize(不推荐,已经好久没维护了)

7.1 介绍

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

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

7.2 相关文档

  • GitHub 仓库:https://github.com/oxequa/realize

7.3 安装与使用

  1. 进入到你的项目目录
cd /path/to/myapp
  1. 使用以下命令安装 gowatch
go install github.com/oxequa/realize@latest
go get github.com/oxequa/realize

首先进行初始化,默认配置即可:

realize init

执行项目:

realize start

添加命令:

realize add

删除命令:

realize init

7.4 命令参数

选项:

--name="name"               -> 根据现有配置的名称运行
--path="realize/server"     -> 自定义路径(如果未指定,将采用工作目录名称)
--generate                  -> 启用 go generate
--fmt                       -> 启用 go fmt
--test                      -> 启用 go test
--vet                       -> 启用 go vet
--install                   -> 启用 go install
--build                     -> 启用 go build
--run                       -> 启用 go run
--server                    -> 启用 Web 服务器
--open                      -> 在默认浏览器中打开 Web UI
--no-config                 -> 忽略现有配置/跳过创建新配置

示例:

$ realize start
$ realize start --path="mypath"
$ realize start --name="realize" --build
$ realize start --path="realize" --run --no-config
$ realize start --install --test --fmt --no-config
$ realize start --path="/Users/username/go/src/github.com/oxequa/realize-examples/coin/"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1357383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年PMP考试新考纲-【人员领域】真题解析(3)

今天华研荟继续为您分享PMP新考纲下的【人员People领域】近年真题&#xff0c;帮助大家举一反三&#xff0c;一次性通过2024年的PMP考试。 这两天有读者朋友和我探讨&#xff0c;做机构提供的模拟题是否有必要。华研荟的态度是&#xff1a;完全没必要&#xff0c;做模拟题是浪费…

学而时习之---状态模式

在软件系统中&#xff0c;有些对象也像水一样具有多种状态&#xff0c; 这些状态在某些情况下能够相互转换&#xff0c; 而且对象在不同的状态下具有不同的行为。 为了更好地对这些具有多种状态的对象进行设计。 使用一种被称为状态模式的设计模式。 状态模式用于解决系统中复…

天翼云搭建CUDA开发环境综合教程

一、英伟达环境安装主要流程 1、下载安装对应系统版本nVidia驱动程序安装验证 2、CUDA开发套件安装验证 3、深度学习框架安装验证 4、容器化CUDA环境安装验证 5、制作天翼云主机私有镜像 6、分享镜像给其他用户&#xff0c;实现天翼云A10显卡英伟达驱动环境共享 二、详细…

01第一个Mybatis程序+引入Junit+引入日志文件logback

Mybatis MyBatis本质上就是对JDBC的封装&#xff0c;通过MyBatis完成CRUD。而对于JDBC&#xff0c;SQL语句写死在Java程序中&#xff0c;不灵活。改SQL的话就要改Java代码。违背开闭原则OCP。对于事务机制&#xff0c;MyBatis支持 或managed模式&#xff0c;JDBC模式中MyBatis…

element-ui Tree 树形控件 过滤保留子级并获取过滤后的数据 多选改单选

本示例基于vue2 element-ui element-ui 的官网demo是只保留到过滤值一级的&#xff0c;并不会保留其子级 目标 1、Tree 树形控件 保留过滤值的子级 2、在第一次过滤数据的基础上进行第二次过滤 3、Tree 树形控件 多选改为单选&#xff0c;且只有最末端子级可以选择 不足…

「解析」Windows 如何优雅使用 Terminal

所谓工欲善其事必先利其器&#xff0c;对于开发人员 Linux可能是首选&#xff0c;但是在家学习的时候&#xff0c;我还是更喜欢使用 Windows系统&#xff0c;首先是稳定&#xff0c;其次是习惯了。当然了&#xff0c;我还有一台专门安装 Linux系统的小主机用于学习Linux使用&am…

八、QLayout 用户基本资料修改(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在很多应用程序中会有用户注册或用户编辑信息等界面。本文就设计一个用户信息编辑界面。要求包含用户名、姓名、性别、部门、年龄、头像、个人说明等信息。 二、实现代码 #ifndef DIALOG_H #define D…

MySQL数据管理(一)

一、列类型 列类型指规定数据库中该列存放的数据类型 列类型分类 数值类型字符串类型日期和时间型数值类型 数值类型 字符串类型 日期和时间类型 MySQL允许“不严格”语法&#xff0c;任何标点符号都可以作为日期部分之间的间隔符&#xff0c;如“24-01-03”、“24.01.03”…

第二百四十五

我们在上一章回中介绍了"修改页面导航中遇到的问题"沉浸式状态样相关的内容&#xff0c;本章回中将介绍如何修改Avatar的大小.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在正常使用CirCleAvatar组件时可以通过该组件的radius属性来修改它的…

Git 对项目更新的时候提示错误 repository not owned by current user

遇到 Git 提示的错误信息为&#xff1a;repository not owned by current user 上图显示的是错误的信息。 问题和解决 出现上面错误信息的原因是当前文件夹的权限和 Git 的执行权限不一直导致的。 我们的问题是我们希望在网盘上使用 Git 更新克隆后的代码&#xff0c;但登录…

KeyError: ‘model_state_dict‘

问题 加载模型权重文件时获取model_state_dict键失败 解决 单步调试发现保存模型权重时正确保存了该键值对&#xff0c;再次调试时发现莫名奇妙又没错了 首先确认保存模型时的状态字典键名&#xff1a;确保在保存模型权重时&#xff0c;正确地使用了 model.state_dict() 方法…

机器学习原理到Python代码实现之LinearRegression

Linear Regression 线性回归模型 该文章作为机器学习的第一篇文章&#xff0c;主要介绍线性回归模型的原理和实现方法。 更多相关工作请参考&#xff1a;Github 算法介绍 线性回归模型是一种常见的机器学习模型&#xff0c;用于预测一个连续的目标变量&#xff08;也称为响应变…

el-autocomplete远程搜索使用及el-upload上传多个文件流给后端,详情接口返回的是文件地址,前端将文件地址转成文件流,回传文件流给后端

最近遇到一个项目,里面有2个需求我觉得挺常见的,第一个需求是一个表单里,当用户在输入名称后,前端调接口发请求获取到关联名称的企业名称,并展示,然后当用户选中企业后,前端调接口获取选中企业的具体信息,并填充到表单里;第二个需求是,表单里有个上传图片的功能,前端…

【elfboard linux开发板】8. watchdog 和 mpu

1. 用文件IO的方式使用watchdog a. ioctl 命令说明 需要的头文件#include <sys/ioctl.h> 格式&#xff1a;int ioctl(int fd, unsigned long request, …) fd 必须被打开 第二个参数是一个依赖设备的请求代码 第三个参数是一个无类型的内存指针 返回值&#xff1a;成功为…

Python 资源大全中文版

文末有链接 资源列表 环境管理 管理 Python 版本和环境的工具 p&#xff1a;非常简单的交互式 Python 版本管理工具。 pyenv&#xff1a;简单的 Python 版本管理工具。 Vex&#xff1a;可以在虚拟环境中执行命令。 virtualenv&#xff1a;创建独立 Python 环境的工具。 …

【React系列】react-router

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识react-router 1.2. 前端路由原理 前端路由是如何做到URL和内容进行映射呢&#xff1f;监听URL的改变。 UR…

Halcon粘连木材图像的目标分割计数

Halcon粘连木材图像的目标分割计数 文章目录 Halcon粘连木材图像的目标分割计数1. 提取面积较小区域2. 分割较大区域3. 区域合并与计数 本文以一个实际场景图片为例&#xff0c;介绍阈值处理与形态学计算的应用。案例图像如图所示,图&#xff08;a&#xff09;为输入的原始图像…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -小程序端TabBar搭建

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

突破技术边界:R与jsonlite库探秘www.snapchat.com的数据之旅

概述 Snapchat是一款流行的社交媒体应用&#xff0c;它允许用户发送和接收带有滤镜和贴纸的照片和视频&#xff0c;以及创建和观看故事和发现内容。Snapchat的数据是非常有价值的&#xff0c;因为它可以反映用户的行为、偏好和趋势。然而&#xff0c;Snapchat的数据并不容易获…

从0开始python学习-40.通过正则表达式/json进行接口关联

目录 1. 正则表达式&#xff1a;使用re库&#xff08;需安装-pip install re&#xff09;&#xff0c;只能提取字符串的数据。 1.1 re.seach&#xff1a;提取一个值&#xff0c;得到的是一个对象&#xff0c;通过下标group(1)取值&#xff0c;如果没有匹配到值则返回None 1.…