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

更新日期: 2019-10-18 阅读次数: 327 字数: 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 聊聊。 白天工地搬砖,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2019年11月22日 小雪
2019年11月22日 感恩节
2019年11月29日 黑色星期五
2019年12月01日 世界艾滋病日
2019年12月03日 国际残疾人日
2019年12月07日 大雪
2019年12月09日 "一二九"运动纪念日
2019年12月09日 世界足球日
2019年12月10日 世界人权日
2019年12月12日 西安事变纪念日
2019年12月13日 南京大屠杀
2019年12月20日 澳门回归日
查看更多节日