英文:
same code but different results using gin + go-template
问题
基本信息
- Go版本:go1.4.2 darwin/amd64
- 操作系统:Mac OS X 10.10.5
我正在开发一个基于go和gin的小型Web项目。这是我的golang代码。运行go run test.go
后,我们将得到一个监听在8089端口的Web服务器。
Golang test.go
package main
import "github.com/gin-gonic/gin"
import "net/http"
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{
"scheme": "http",
"domain": "meican.loc",
})
})
router.Run(":8089") // 在0.0.0.0:8089上监听并提供服务
}
后端生成的HTML代码应该包含一个前端JavaScript引擎(比如Angular.js)使用的模板。
所以模板代码位于script
标签中,就像这样:
部分 templates/index.html
<script type="text/template" charset="utf-8">
<div data="{{.scheme}}://{{.domain}}/qr"></div>
<div data="{{.scheme}}://{{.domain}}/qr"></div> <!-- 这里有问题 -->
</script>
当第二次使用{{.domain}}
时,我得到了不同的结果。我刷新了浏览器并查看了源代码。然后我得到了这个:
浏览器源代码结果
<script type="text/template" charset="utf-8">
<div data="http://meican.loc/qr"></div>
<div data="http://"meican.loc"/qr"></div> <!-- 这里有问题 -->
</script>
第二个div
多了两个额外的双引号。
为什么会出现这种情况?如何解决这个问题?
英文:
Basic information
- Go version: go1.4.2 darwin/amd64
- Operating System: Mac OS X 10.10.5
I'm working on a small Web project written based on go and gin. Here is my golang code. After running go run test.go
we have a web server, which is listening on 8089.
Golang test.go
package main
import "github.com/gin-gonic/gin"
import "net/http"
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{
"scheme": "http",
"domain": "meican.loc",
})
})
router.Run(":8089") // listen and serve on 0.0.0.0:8089
}
The html code generated in back-end should contain a template used by front-end javascript engine (Let's say Angular.js).
So the template code is in script
tag, just like this:
Part of templates/index.html
<script type="text/template" charset="utf-8">
<div data="{{.scheme}}://{{.domain}}/qr"></div>
<div data="{{.scheme}}://{{.domain}}/qr"></div> <!-- problem here -->
</script>
When {{.domain}}
is used at the second time, I got different result. I refreshed the browser and checked out the source code. Then I got this:
Browser source code result
<script type="text/template" charset="utf-8">
<div data="http://meican.loc/qr"></div>
<div data="http://"meican.loc"/qr"></div> <!-- problems here -->
</script>
The second div
has 2 extra double quotes.
Why this happens? And how to resolve this problem?
答案1
得分: 1
这是Go语言中的一个错误,并且已经在2016年3月被计划在1.7版本中修复(也在1.6版本中部分修复)。
英文:
This is a bug in Go, and has been slated to be fixed in 1.7 as of March 2016 (Also partially addressed in 1.6)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论