Gin框架LoadHTMLGlob匹配模板失败,求正确模板路径
解决Gin模板路径匹配失败的Panic问题
这个问题的核心其实是Go程序的文件路径是相对你运行程序时的工作目录,而非代码文件所在的目录,很多刚接触Gin的开发者都会在这里踩坑。
先明确你的项目结构:
gin-cource/ src/ templates/ tmpl1.html tmpl2.html main.go # 你的第11行代码位于此处
步骤1:先确认当前工作目录
在main.go里加几行代码,打印出程序运行时的实际工作目录——这是排查路径问题的关键:
import ( "fmt" "os" "github.com/gin-gonic/gin" ) func main() { // 打印当前工作目录 wd, err := os.Getwd() if err != nil { fmt.Println("获取工作目录失败:", err) } fmt.Println("当前工作目录:", wd) r := gin.Default() // 后续代码... }
运行程序后,你会得到两种常见结果:
- 如果你在
gin-cource/src/目录下执行go run main.go,输出会是c:/users/user/go/src/gin-cource/src - 如果你在
gin-cource/目录下执行go run src/main.go,输出会是c:/users/user/go/src/gin-cource
步骤2:根据工作目录设置正确路径
根据上面的结果,对应调整LoadHTMLGlob的路径:
若工作目录是
gin-cource/src/
模板文件就在当前目录的templates子文件夹里,直接用:r.LoadHTMLGlob("templates/*.html")(如果
templates下面还有嵌套子目录,再用templates/**/*.html匹配所有子目录下的HTML文件)若工作目录是
gin-cource/
需要加上src前缀:r.LoadHTMLGlob("src/templates/*.html")
额外提示
- 尽量避免使用绝对路径(比如
c:/users/user/go/src/gin-cource/src/templates/*.html),换环境后路径会直接失效。 - 如果你用
go build编译程序,编译后的可执行文件要和templates目录保持对应层级关系,运行时才能正确找到模板。
内容的提问来源于stack exchange,提问作者rozerro




