Go HTML コメントがレンダリングされない: template.HTML を使用した解決策
Go Web アプリケーションで、レンダリングされたページで HTML コメントが消えるイライラする問題になる可能性があります。これは、コンテナレス制御フロー構文に依存する KnockoutJS コードで特に問題になります。
この動作の背後にある理由は、デフォルトでは、Go の html/template パッケージがセキュリティ上の理由から HTML コンテンツをエスケープするためです。これは、 で囲まれた HTML コメントがコメントとして表示されるのではなく、エスケープされたテキストとしてレンダリングされることを意味します。
この問題を解決するために、html/template パッケージは特別なタイプを提供します。 template.HTML と呼ばれます。この型の値はレンダリング時にエスケープされません。
カスタム関数のアプローチ
1 つの効果的な解決策は、HTML コメントをテンプレートにラップするテンプレートのカスタム関数を作成することです。 .HTML。その方法は次のとおりです。
<code class="go">func main() { t := template.Must(template.New("").Funcs(template.FuncMap{ "safe": func(s string) template.HTML { return template.HTML(s) }, }).Parse(src)) t.Execute(os.Stdout, nil) } const src = `<html><body> {{safe "<!-- This is a comment -->"}} <div>Some <b>HTML</b> content</div> </body></html>`</code>
この例では、文字列引数を受け取り、それを template.HTML として返すsafe() 関数を定義します。テンプレート内では、{{safe "
使用法
この手法を使用するには、HTML コメントを次の形式に変換するだけです:
<code class="html">{{safe "<!-- Your comment -->"}}</code>
または
<code class="html">{{"<!-- Your comment -->" | safe}}</code>
このアプローチを使用すると、HTML コメントはレンダリングされた出力に保持されます。
注:
以上がGo HTML コメントがレンダリングされたページで消えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。