You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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的路径:

  1. 若工作目录是gin-cource/src/
    模板文件就在当前目录的templates子文件夹里,直接用:

    r.LoadHTMLGlob("templates/*.html")
    

    (如果templates下面还有嵌套子目录,再用templates/**/*.html匹配所有子目录下的HTML文件)

  2. 若工作目录是gin-cource/
    需要加上src前缀:

    r.LoadHTMLGlob("src/templates/*.html")
    

额外提示

  • 尽量避免使用绝对路径(比如c:/users/user/go/src/gin-cource/src/templates/*.html),换环境后路径会直接失效。
  • 如果你用go build编译程序,编译后的可执行文件要和templates目录保持对应层级关系,运行时才能正确找到模板。

内容的提问来源于stack exchange,提问作者rozerro

火山引擎 最新活动