html/templateを使っているときに、テンプレートに渡すURLをエンコードさせたくなかった。
Goのhtml/templateを使って、URLをテンプレートに渡すとエンコードされてしまう仕様になっている。
cf. https://pkg.go.dev/html/template#hdr-Contexts
セキュリティ上の理由でこのような仕様になっていると思うが、HTML上でこれを回避したいようなケースがあると思う。
そういうときはtemplate.URL
を使うと回避できる。
package main
import (
"html/template"
"os"
)
func main() {
const tpl = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>bmf-tech.com</title>
</head>
<body>
<a href="{{ .URL }}">bmf-tech.com</a>
</body>
</html>`
t, _ := template.New("index").Parse(tpl)
data := struct {
URL template.URL
}{
URL: template.URL("http://bmf-tech/posts/search?keyword=something"),
}
t.Execute(os.Stdout, data)
}
地味にハマった。