VIM 临时文件引起的 golang 报错 panic: template: unexpected bad character

更新日期: 2019-10-18 阅读次数: 845 字数: 320 分类: golang

今天在调试一个 golang gin 写的网页项目时,遇到一个诡异的问题。

编译并执行 main.go

go run main.go

报错:

panic: template: .index.html.swp:24: unexpected bad character U+002D '-' in command

goroutine 1 [running]:
html/template.Must(...)
        /usr/local/go/src/html/template/template.go:372
github.com/gin-gonic/gin.(*Engine).LoadHTMLGlob(0xc0001b6280, 0xb068d2, 0x7)
        /home/zhongwei/golang/pkg/mod/github.com/gin-gonic/gin@v1.4.0/gin.go:179 +0x35c
main.main()
        /home/zhongwei/work/my_project/go/main.go:10 +0x49
exit status 2

我看了几遍 index.html 模板文件都没有发现任何语法和特殊字符问题。

仔细一看,实际是 .index.html.swp 文件报错。而这个文件是 VIM 产生的临时文件,只要该文件还在编辑状态,那么这个文件就会一直存在,除非关闭这个文件。

果然,关闭 VIM 之后,在执行 go run main.go 就可以编译成功了。

golang 为何会读取 .swp 文件

看了一下报错那行代码,即 main.go 的第 10 行:

router.LoadHTMLGlob("views/*")

猜测是 gin 默认会读取 views 目录下的所有文件,不但是 html 文件,还有 html.swp 这种临时文件。

如何排除/忽略 .swp 文件

限定 .html 后缀即可:

router.LoadHTMLGlob("views/*.html")

再次编译,就正常了。

gin 中 LoadHTMLGlob 与 LoadHTMLFiles 区别

  • LoadHTMLGlob 可以使用路径通配符。例如: router.LoadHTMLGlob("templates/*")
  • LoadHTMLFiles 需要指定需加装的 HTML 文件名。例如:router.LoadHTMLFiles("templates/template1.html", "templates/template2.html")

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊。 白天工地搬砖,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2020年02月24日 第三世界青年日
2020年02月24日 龙抬头
2020年02月28日 世界居住条件调查日
2020年03月01日 国际海豹日
2020年03月03日 全国爱耳日
2020年03月05日 学雷锋日
2020年03月05日 惊蛰
2020年03月08日 三八妇女节
2020年03月12日 植树节
2020年03月14日 白色情人节
2020年03月15日 消费者权益日
2020年03月17日 国际航海日
查看更多节日