Go 热加载之fresh详解
正文
热加载是指可以在不重启服务的情况下,保存后即可让更改的代码生效的一种开发模式。热加载可以显著的提升开发和调试的效率,有了热加载后,说明你不用重新再编译、再执行了。
特别是涉及到效果渲染,如前端的开发中,如果每次改了代码后都要重新编译再执行,那开发效率太低了。
最完美的就是:代码改了啥,我一保存,前端页面马上就能显示我改了啥,这样就十分方便。
同样 Go 里面也有这种热加载的机制,Go 语言具有 部署简单、并发性好、上手快 的优势,如 Docker、Kubnernetes 等都是用 Go 开发,现在很多服务的后台也是用 Go 来写的,Go 发展迅速,使用人群基数也在不断扩大。
其实,Go 的热加载小工具的选择还是挺多的,除了我们这里要说的 fresh 之外,还有 air、bee、gowatch 等。
咱们开始。
首先确保你已经安装好了 Go 的环境 (Go 环境的安装特别简单),然后安装 fresh,同样非常简单:
go get github.com/pilu/fresh
没错,这样就好了。怎么用呢?咱们到 go 的工程目录下,直接键入 fresh
替换原来的 go run main.go
,就可以直接跑起来了。
为了更加好的说明,咱们来举个例子,用 gin 来举例吧,编写一个 main.go 文件:
package main import ( "github.com/gin-gonic/gin" ) func main() { // 创建一个默认的路由引擎 r := gin.Default() // 配置路由 r.GET("/", func(c *gin.Context){ c.JSON(200, gin.H{ // c.JSON: 返回 JSON 格式的数据 "message": "Hello world! I from Gin.", }) }) // 启动 HTTP 服务,监听 8080 端口 r.Run(":8080") }
传统运行 go 的方式:
go run main.go
打开 chrome,输入 IP:8080,可得到输出:
注:上图的 FeHelper 是个浏览器插件,可以更加好的展示如 JSON 格式数据
上面说的 传统运行 go 的方式 也即冷启动,每次改动东西后,需要重新手动启动程序。接下来咱们使用 热启动,直接键入 fresh
前端展示效果是一样的,这个时候如果你改了东西,直接保存,它不用再重启服务,就可以直接帮你把修改后的渲染到页面了。
再补充一下,如果你在执行 fresh
命令碰到报错: fresh: 未找到命令。则你可能需要做个软连接:
sudo ln -s ~/go/bin/fresh /usr/bin
这样应该就可以了。
以上就是Go 热加载之fresh详解的详细内容,更多关于Go 热加载 fresh的资料请关注我们其它相关文章!
相关推荐
-
Golang使用CGO与Plugin技术运行加载C动态库
目录 文章简介 技术背景 解决方案1 解决方案2 文章简介 本文介绍一种 Golang 程序在运行时加载 C 动态库的技术,跳过了 Golang 项目编译阶段需要链接 C 动态库的过程,提高了 Golang 项目开发部署的灵活性. 技术背景 Golang 程序调用 OpenCC 动态库的函数,执行文本繁体转简体操作. 需要在编译时不链接动态库,只在程序运行时加载 OpenCC 动态库. OpenCC 库是使用 C++ 编写的繁简体转换程序,提供 C 语言 API 接口. 开源项目地址 CGO 技
-
使用Go语言实现配置文件热加载功能
说到配置文件热加载,这个功能在很多框架中都提供了,如beego,实现的效果就是当你修改文件后,会把你修改后的配置重新加载到配置文件中,而不用重启程序,这个功能在日常中还是非常实用的,毕竟很多时候,线上的配置文件不是想改就能改的. 这次就自己实现一个配置文件的热加载功能的包,并通过一个简单的例子对完成的包进行使用验证 配置文件热加载包的是实现 其实整体的思路还是比较简单的,当获取配置文件内容后,会开启一个goroutine,去 循环读配置文件,当然这里不可能不限制的一直循环,而是设置了一个定时器,
-
golang gorm的预加载及软删硬删的数据操作示例
目录 1. orm读写数据 1. 创建 1.1. 创建记录 1.2. 默认值 1.3. 在Callbacks中设置主键 1.4. 扩展创建选项 2. 查询 2.1. Where查询条件 (简单SQL) 2.2. Where查询条件 (Struct & Map) 2.3. Not条件查询 2.4. 带内联条件的查询 2.5. Or条件查询 2.6. 查询链 2.7. 扩展查询选项 2.8. FirstOrInit 2.9. Attrs 2.10. Assign 2.11. FirstOrCreat
-
Golang库插件注册加载机制的问题
目录 注册 加载 总结 最近看到一个内部项目的插件加载机制,非常赞.当然这里说的插件并不是指的golang原生的可以在buildmode中加载指定so文件的那种加载机制.而是软件设计上的「插件」.如果你的软件是一个框架,或者一个平台性产品,想要提升扩展性,即可以让第三方进行第三方库开发,最终能像搭积木一样将这些库组装起来.那么就可能需要这种库加载机制. 我们的目标是什么?对第三方库进行某种库规范,只要按照这种库规范进行开发,这个库就可以被加载到框架中. 我们先定义一个插件的数据结构,这里肯定是需
-
Go 热加载之fresh详解
正文 热加载是指可以在不重启服务的情况下,保存后即可让更改的代码生效的一种开发模式.热加载可以显著的提升开发和调试的效率,有了热加载后,说明你不用重新再编译.再执行了. 特别是涉及到效果渲染,如前端的开发中,如果每次改了代码后都要重新编译再执行,那开发效率太低了. 最完美的就是:代码改了啥,我一保存,前端页面马上就能显示我改了啥,这样就十分方便. 同样 Go 里面也有这种热加载的机制,Go 语言具有 部署简单.并发性好.上手快 的优势,如 Docker.Kubnernetes 等都是用 Go 开
-
基于Python实现配置热加载的方法详解
目录 背景 如何实现 使用多进程实现配置热加载 使用signal信号量来实现热加载 采用multiprocessing.Event 来实现配置热加载 结语 背景 由于最近工作需求,需要在已有项目添加一个新功能,实现配置热加载的功能.所谓的配置热加载,也就是说当服务收到配置更新消息之后,我们不用重启服务就可以使用最新的配置去执行任务. 如何实现 下面我分别采用多进程.多线程.协程的方式去实现配置热加载. 使用多进程实现配置热加载 如果我们代码实现上使用多进程, 主进程1来更新配置并发送指令,任务的
-
mybatis xml文件热加载实现示例详解
目录 引言 一.xml 文件热加载实现原理 1.1 xml 文件怎么样解析 1.2 实现思路 二.mybatis-xmlreload-spring-boot-starter 登场 2.1 核心代码 2.2 安装方式 2.3 使用配置 最后 引言 本文博主给大家带来一篇 mybatis xml 文件热加载的实现教程,自博主从事开发工作使用 Mybatis 以来,如果需要修改 xml 文件的内容,通常都需要重启项目,因为不重启的话,修改是不生效的,Mybatis 仅仅会在项目初始化的时候将 xml
-
mui上拉加载功能实例详解
最近在做移动端的项目,用到了mui的上拉加载,整理如下: 1.需要引入的css.js <link rel="stylesheet" href="common/mui/css/mui.min.css" rel="external nofollow" > <script src="js/jquery-3.2.0.min.js"></script> <script src="com
-
Swift 开发之懒加载的实例详解
Swift 开发之懒加载的实例详解 /// A display link that keeps calling the `updateFrame` method on every screen refresh. private lazy var displayLink: CADisplayLink = { self.isDisplayLinkInitialized = true let displayLink = CADisplayLink(target: TargetProxy(target:
-
web.xml中如何设置配置文件的加载路径实例详解
web.xml中如何设置配置文件的加载路径实例详解 web应用程序通过Tomcat等容器启动时,会首先加载web.xml文件,通常我们工程中的各种配置文件,如日志.数据库.spring的文件等都在此时被加载,下面是两种常用的配置文件加载路径,即配置文件可以放到 SRC目录下或者可以放到WEB-INF根目录下 第一种在web.xml中这样配置: <context-param> <param-name >contextConfigLocation </param-name >
-
webpack学习笔记之代码分割和按需加载的实例详解
本文介绍了webpack学习笔记之代码分割和按需加载的实例详解,分享给大家,也给自己留个笔记 为什么需要代码分割和按需加载 代码分割就是我们根据实际业务需求将代码进行分割,然后在合适的时候在将其加载进入文档中. 举个简单的例子: 1.一个HTML中存在一个按钮 2.点击按钮出现一个包着图片的div 3.点击关闭按钮图片消失 Demo目录: 一.当未点击按钮时浏览器只加载了对入口文件打包后的js 二.点击按钮会对组件进行异步加载 这个clichunk就是我们打包好的click组件,包括相应的JS逻
-
JDBC数据库连接过程及驱动加载与设计模式详解
首先要导入JDBC的jar包: 接下来,代码: Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段. JDBC连接数据库 • 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String
-
vue+element树组件 实现树懒加载的过程详解
一.页面样式 二.数据库 三.前端页面代码 <template> <el-tree :props="props" :load="loadNode" lazy show-checkbox> </el-tree> </template> <script> export default { data () { return { props: { label: 'name', children: 'zones',
-
SpringBoot配置文件的加载位置实例详解
springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正常运行.在一些特殊的情况下,我们需要做修改一些配置,或者需要有自己的配置属性. SpringBoot启动会扫描以下位置的application.yml或者 application.properties文件作为SpringBoot的默认配置文件. -file:./config/ -file:./
随机推荐
- sqlite循环批量插入数据采用批处理文件实现
- 基于Jquery实现焦点图淡出淡入效果
- 详解Angualr 组件间通信
- PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
- Android Activity 与Service进行数据交互详解
- 基于js对象,操作属性、方法详解
- 在Linux系统安装MySql步骤截图详解
- Linux Shell脚本系列教程(三):变量和环境变量
- JS设置下拉列表框当前所选值的方法
- div scroll始终在最底部的实现代码
- Java数据溢出代码详解
- javascript写的日历类(基于pj)
- Android动态布局小结
- jQuery中detach()方法用法实例
- Thinkphp5 微信公众号token验证不成功的原因及解决方法
- 关于Django显示时间你应该知道的一些问题
- 提高Laravel应用性能方法详解
- python交易记录整合交易类详解
- pandas DataFrame的修改方法(值、列、索引)
- 用Python写一个自动木马程序