go语言静态资源打包——思悟项目技术3

ops/2024/10/30 5:51:40/

思悟项目:

golang qq邮件发送验证码——思悟项目技术1

go语言gin框架平滑关闭——思悟项目技术2


Go 语言默认情况下打包并不会将静态文件直接包含在可执行文件中。Go 编译器只会打包 .go 源代码文件,静态文件(如 HTML、CSS、JS 或图片等)并不会自动包含在生成的二进制文件中。

解决方法如下:

方法一

写一个函数,返回模版文件字符串,比如:

这样我们什么时候使用这个模版,就什么时候调用这个函数。

func GetEmailFormatTemplate() string {return `<!-- 邮箱发送验证码模版 -->
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>验证码</title></head>
<body>
<div class="container"><h1>验证码通知</h1><p>亲爱的用户:</p><p>你的验证码为 <span class="code">%s</span>,有效时间为 %d 分钟。</p><div class="footer">如果您没有请求此验证码,请忽略此邮件。</div>
</div>
</body>
</html>
`
}

方法二

Gin Web框架:静态资源嵌入

例子:

目录结构为:

main.go 文件:(main.go 中缺失的一些变量在assets.go 文件中,等到我们生成 assets.go 后 main.go 文件就不会报错了)

package mainimport ("fmt""github.com/gin-gonic/gin""html/template""io/ioutil""strings"
)func main() {r := gin.New()t, err := loadTemplate()if err != nil {panic(err)}r.SetHTMLTemplate(t)r.GET("/", func(c *gin.Context) {c.JSON(200, "hello world")})r.Run(":8080")
}// loadTemplate 加载由 go-assets-builder 嵌入的模板
func loadTemplate() (*template.Template, error) {t := template.New("") // 空模版// 把从文件中读取的内容添加到这个模板中// Assets 是通过 go-assets-builder 生成的静态资源对象。Assets.Files 包含所有被打包的文件。// name 是文件的路径,file 是表示文件内容的对象。for name, file := range Assets.Files {// 打印每个被打包的文件名fmt.Println("Loaded static file:", name)// .tmpl、.html 和 .txt 文件都可以被打包并在程序中使用。if file.IsDir() || (!strings.HasSuffix(name, ".tmpl") && !strings.HasSuffix(name, ".html") && !strings.HasSuffix(name, ".txt")) {continue}h, err := ioutil.ReadAll(file)if err != nil {return nil, err}// 在模板对象 t 中创建一个新的模板(名称为 name),并将读取到的文件内容解析为模板。t, err = t.New(name).Parse(string(h))if err != nil {return nil, err}}return t, nil
}

步骤如下:

1. 安装 go-assets-builder

go install github.com/jessevdk/go-assets-builder@latest

2. 生成静态资源:使用 go-assets-builder 将静态资源打包成 Go 代码: 

go-assets-builder -o assets.go template/emailFormatTemplate.html

这个命令会将 template 目录下 emailFormatTemplate.html 文件打包到 assets.go 文件中。你可以在这个文件中看到 Assets 变量的定义,它包含了静态资源。

生成了一个 assets.go 文件:

3. 编译并运行:静态资源会被打包进可执行文件中:

go build -o myapp

./myapp

解释:

  • go-assets:这是将静态资源打包到 Go 二进制文件中的工具,允许你在运行时直接访问打包进来的文件。
  • Assets.Files:生成的 assets.go 文件中,会创建 Assets 变量,包含所有打包的文件信息。loadTemplate 函数遍历这些文件,读取内容,并解析成模板。
  • html/template:Gin 使用标准库的 html/template 来渲染 HTML 页面。

这样做的好处是,可以把所有的资源打包到一个可执行文件中,使部署更加方便,无需额外的文件管理。

其实本质上解决这个静态资源打包问题的方法都是:先读取这个模版,把静态资源转换为 Go 文件中的字节数据,并打包到最终的二进制文件中。


http://www.ppmy.cn/ops/129505.html

相关文章

jmeter自定义函数

jmeter本身带有很多内带的函数&#xff0c;功能很强大&#xff0c;但是更强大的是&#xff0c;jmeter还可以扩展&#xff0c;让用户自定义函数。 下面来看下自定义函数是怎么做的。 需要在org.apache.jmeter.functions包中&#xff0c;添加我们的自定义函数&#xff0c;函数模…

Bash、sh 和 Shell都弄混了?

在Linux和Unix系统中&#xff0c;Bash、sh 和 Shell 都与命令行解释器相关&#xff0c;但它们各自的含义和作用略有不同。以下是它们之间的关系和区别&#xff1a; Shell Shell 是一个通用术语&#xff0c;指的是操作系统中负责解释和执行用户命令的程序。它是用户与操作系统…

用网页制作安装包——解密微软那些使用网页的exe

我们见到的很多exe软件其实都是html做的ui 一、微软visual studio 安装解析 打开html文件 二、使用网页制作的软件很多 可牛&#xff0c;微软开发软件 win98桌面背景 常见的文件格式hta 三、hta 网页应用程序 HTA属性 播报 编辑 HTA与普通的网页结构差不多&#xff0c…

Apache POI—读写Office格式文件

Apache POI 是一个开源的 Java 库&#xff0c;用于读写 Microsoft Office 格式的文件&#xff0c;主要包括 Excel、Word 和 PowerPoint 等文档。POI 对 Excel 文件的支持最为完善&#xff0c;通过 POI 可以方便地进行 Excel 文件的创建、编辑、读取等操作。 1. Apache POI 简介…

【Java SpringIOC与ID随感录】 基于 XML 的 Bean 装配

前言 我们知道了 Spring 是⼀个开源框架&#xff0c;他让我们的开发更加简单。他⽀持⼴泛的应⽤场 景&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这也是 Spring 能够⻓久不衰的原因。 这里来举个例子&#xff1a; 开发业务逻辑层一般是&#xff1a;控制层、业务逻辑层、持久…

赛博威携手百度智能云,开启数字营销新未来

近日&#xff0c;赛博威集团华东大区苏州百捷信息科技&#xff08;以下简称“赛博威”&#xff09;与百度智能云正式达成解决方案销售伙伴关系&#xff0c;双方将在人工智能、大数据与云计算领域深度合作&#xff0c;为客户提供更全面、更高效、更智能的数字营销解决方案&#…

Vue3使用AntV | X6绘制流程图:开箱即用

x6官方地址X6图编辑引擎 | AntV 官方文档仔细地介绍了很多丰富的功能&#xff0c;这里的demo可以满足基本的使用&#xff0c;具体拓展还需要仔细看文档内容 先上效果图 1、安装 通过 npm 或 yarn 命令安装 X6。 # npm npm install antv/x6 --save# yarn yarn add antv/x6 …

[瑞吉外卖]-09数据库优化

MySql主从复制 介绍 当前项目中, 数据库的读和写都由一台数据库承担&#xff0c;压力大, 数据库服务器磁盘损坏则数据丢失&#xff0c;造成单点故障 MySQL主从复制是一个异步的复制过程&#xff0c;底层是基于Mysql数据库自带的二进制日志功能。 就是一台或多台MySOL数据库(s…