当前位置: 首页 > news >正文

gin: 打包模板文件、静态文件到二进制文件中

一,默认html模板不会打包到二进制文件中

如果二进制文件的当前目录下不包含html模板文件路径,会报错如下

$ ./mediabank 
[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)[GIN-debug] GET    /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers)
[GIN-debug] HEAD   /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers)
panic: html/template: pattern matches no files: `templates/**/*.html`goroutine 1 [running]:
html/template.Must(...)/usr/local/soft/go/src/html/template/template.go:368
github.com/gin-gonic/gin.(*Engine).LoadHTMLGlob(0xc0001c3ba0, {0xa8207b, 0x13})/data/gopath/pkg/mod/github.com/gin-gonic/gin@v1.10.1/gin.go:263 +0x2f2
mediabank/routes.Routes()/data/goapp/mediabank/routes/routes.go:15 +0x5b
main.main()/data/goapp/mediabank/main.go:10 +0x13

二,用打包到二进制文件中

代码

main

package mainimport ("embed""mediabank/routes"
)// 嵌入文件只能为源码文件同级目录和子目录下的文件
//go:embed static/* templates/*
var embedFs embed.FS// 入口函数
func main() {//引入路由r := routes.Routes(embedFs)//runr.Run(":8080")
}

route

package routesimport ("embed""github.com/gin-gonic/gin""html/template""io/fs""mediabank/controller""net/http"
)func Routes(embedFs embed.FS) *gin.Engine {router := gin.Default()//1, 加载模板文件tmpl := template.Must(template.New("").ParseFS(embedFs, "templates/**/*.html"))router.SetHTMLTemplate(tmpl)//2, 加载静态文件fp, _ := fs.Sub(embedFs, "static")router.StaticFS("/static", http.FS(fp))//3,加载favicon//static是存放favicon.ico的目录faviconHandler := http.FileServer(http.FS(fp))router.GET("/favicon.ico", func(c *gin.Context) {faviconHandler.ServeHTTP(c.Writer, c.Request)})//mediamedia := controller.NewMediaController()mediaGroup := router.Group("/media"){mediaGroup.GET("/detail", media.Detail)mediaGroup.GET("/list", media.List)mediaGroup.GET("/user", media.User)}return router
}

三,运行结果:

$ ./mediabank 
[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)[GIN-debug] GET    /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers)
[GIN-debug] HEAD   /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers)
[GIN-debug] GET    /favicon.ico              --> mediabank/routes.Routes.func1 (3 handlers)
[GIN-debug] GET    /media/detail             --> mediabank/controller.(*MediaController).Detail-fm (3 handlers)
[GIN-debug] GET    /media/list               --> mediabank/controller.(*MediaController).List-fm (3 handlers)
[GIN-debug] GET    /media/user               --> mediabank/controller.(*MediaController).User-fm (3 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

 

http://www.gsyq.cn/news/8391.html

相关文章:

  • gin: 判断是否ajax请求
  • An Empirical Study on Commit Message Generation using LLMs via In-Context Learning 论文笔记
  • Jetpack Navigation - 在 Fragment 中跳转到 Activity(4 种方式) - 详解
  • 强化学习之父 Richard Sutton: 如今AI正进入“经验时代” - 指南
  • 嵌入式笔记系列——UART:TTL-UART、RS-232、RS-422、RS-485 - 指南
  • 实用指南:【保姆级教程】TEXTurePaper运行环境搭建与Stable Diffusion模型本地化
  • 高级数据结构手册
  • 【无人艇协同】基于matlab面向海事安全的双体无人艇分布式协同任务规划(目标函数:总时间满意度)【含Matlab源码 14161期】博士论文 - 教程
  • 深入解析:【Fiora深度解析】手把手教你用固定公网IP搭建专属聊天系统!
  • 使用JavaScript和CSS创建动态高亮导航栏
  • wxt 开发浏览器插件的框架
  • Gridspech 全通关
  • 纯国产GPU性能对比,谁才是国产算力之王?
  • 英伟达入股英特尔,当竞争对手便成协作者,真正受益的......
  • ODT/珂朵莉树 入门
  • 绯闻女孩不只会八卦:从“验明正身”到“抓内鬼”,Gossip的进阶玩法
  • reLeetCode 热题 100- 15. 三数之和 - MKT
  • US$94 T300 Key Programmer Spanish Blue 2016 V16.8 Full
  • US$99 VVDI MB NEC Key Adaptor
  • testuserpython
  • [Nacos/Docker/MCP] Nacos 3.x : 为 AI MCP 而生
  • AIGC拾遗:Flash Attention
  • Python-CSV库
  • C++小白修仙记_LeetCode刷题_双指针
  • 前路漫漫亦灿灿 往事堪堪亦澜澜
  • 现代汽车前瞻杯2025牛客暑期多校训练营3
  • 详细介绍:[新启航]白光干涉仪在微透镜阵列微观 3D 轮廓测量中的应用解析
  • 2023 CCPC 深圳 F
  • 完整教程:【算法】双指针(三)[快慢指针]-快乐数
  • 9.19做题资料:哈希表查找时间复杂度分析