Это валидная javscript-запись для строки [{"ID":"1"}]
Но можно сделать красивее: 
https://play.golang.org/p/brmFG2PGJDpackage main
import (
	"bytes"
	"fmt"
	"html/template"
	"log"
)
func main() {
	out := bytes.NewBuffer([]byte{})
	t, err := template.New("foo").Parse(`<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
        var data = JSON.parse( {{.}} );
    </script>
</head>
<body>
</body>
</html>`)
	if err != nil {
		log.Fatal("Cannot parse the template: ", err)
	}
	err = t.Execute(out, `[{"ID":"1"}]`)
	if err != nil {
		log.Fatal("Cannot execute the template: ", err)
	}
	fmt.Println(string(out.Bytes()))
}
А можно ещё красивее: 
https://play.golang.org/p/Ir4wLhHMuVpackage main
import (
	"bytes"
	"fmt"
	"html/template"
	"log"
)
type A []struct {
	ID string
}
func main() {
	out := bytes.NewBuffer([]byte{})
	t, err := template.New("foo").Parse(`<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
        var data = {{.}};
    </script>
</head>
<body>
</body>
</html>`)
	if err != nil {
		log.Fatal("Cannot parse the template: ", err)
	}
	data := A{
		{ID: "1"},
	}
	err = t.Execute(out, data)
	if err != nil {
		log.Fatal("Cannot execute the template: ", err)
	}
	fmt.Println(string(out.Bytes()))
}
Причина в том, что т.к. Go не может полностью распарсить грамматику js, он подстраховывается, чтобы случайно не допустить code injection.
Go видит скобки и понимает, что ему надо вставить содержимое строкового литерала js, но т.к. он не может полностью гарантировать, что мы будем внутри скобок, то подстраховывается и эскейпит управляющие символы, чтобы в случае ошибки js просто остановился, но не выполнил вставленный код.
Шаблоны нацелены только на вставку данных и должны гарантировать программисту, что эти данные не будут выполнены как код (если конечно вы сами там eval не вставите).