same code but different results using gin + go-template
Asked Answered
R

1

10

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?

Romanist answered 14/8, 2015 at 8:21 Comment(0)
A
1

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)

Archlute answered 26/3, 2016 at 19:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.