Golang Gin框架加载模板文件LoadHTMLGlob路径问题处理
演示网站:gofly.v1kf.com我的微信:llike620
在 Go 的 router.LoadHTMLGlob(“templates//”)
中,如果你使用 /
作为路径模式而里面有目录时会报错,这是因为:
原因分析
-
/*
和/
/ 的区别:/
只会匹配指定目录下的直接文件,不会递归匹配子目录//
会递归匹配所有子目录中的文件
-
当目录结构如下时:
templates/ ├── index.html └── admin/ └── dashboard.html
-
使用
/
的问题:router.LoadHTMLGlob(“templates/*”)
只会找到index.html
- 当它尝试处理
admin/
目录时,发现这是个目录而不是文件,就会报错
解决方案
-
推荐使用递归模式:
router.LoadHTMLGlob(“templates//”)
-
或者明确指定子目录:
router.LoadHTMLGlob(“templates//”)
-
如果你确实只需要顶级目录的文件:
router.LoadHTMLGlob(“templates/.html”)
技术背景
这个行为是因为 Go 的 filepath.Glob()
的实现方式:
*
不匹配路径分隔符(/
或</code>)
**
可以匹配任意层级的目录- 当 glob 模式遇到目录时,会尝试将其作为文件打开,导致错误
最佳实践
建议总是使用 /*/
模式来确保包含所有子目录中的模板文件,这是 Gin 框架中处理模板目录结构的标准做法。