Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

same code but different results using gin + go-template

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?

like image 482
Miaonster Avatar asked Aug 14 '15 08:08

Miaonster


1 Answers

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)

like image 161
John Weldon Avatar answered Nov 28 '22 04:11

John Weldon