Go: HTML コメントのレンダリングの問題を解決する
Go Web アプリケーションを使用しているときに、HTML コメントが予期せず画面から消えるという問題が発生する場合があります。レンダリングされたページ。この異常は、Go を新しいバージョンに更新した後によく見られます。
この問題を解決するには、Go のテンプレート処理メカニズムを理解する必要があります。 html/template パッケージには、template.HTML として知られる特別なタイプが導入されています。このタイプの値は、テンプレートのレンダリング中にエスケープされません。
解決策は、HTML コメントを template.HTML としてマークすることです。効果的な方法の 1 つは、テンプレート内にカスタム関数を登録することです。この関数は文字列引数を受け取り、それを template.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>
safe() 関数を登録すると、次のように変換できます。 HTML コメントをテンプレート アクションに追加し、この関数を呼び出して元のコメントを渡します。これにより、出力内での保持が確実になります。
必要に応じて、次の構文を使用することもできます。
<code class="go">{{"<!-- Some HTML comment -->" | safe}}</code>
引用符を含む HTML コメントを扱う場合は、それに応じてエスケープすることを忘れないでください。
<code class="go">{{safe "<!-- Some \"HTML\" comment -->"}}</code>
最後に、条件付き HTML コメントの使用には注意してください。これらを使用すると、html/template パッケージに実装されているコンテキスト依存のエスケープが中断される可能性があります。詳細については、ドキュメントを参照してください。
以上がGo を新しいバージョンに更新すると HTML コメントが消えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。