# Functions
HTMLEscapeは、プレーンテキストデータbのエスケープされたHTML相当をwに書き込みます。.
HTMLEscaperは、その引数のテキスト表現のエスケープされたHTML相当を返します。.
HTMLEscapeStringは、プレーンテキストデータsのエスケープされたHTML相当を返します。.
IsTrueは、値がその型のゼロでない「真」であるか、 そして値が意味のある真偽値を持っているかどうかを報告します。 これはifやその他のアクションで使用される真実の定義です。.
JSEscapeは、プレーンテキストデータbのエスケープされたJavaScript相当をwに書き込みます。.
JSEscaperは、その引数のテキスト表現のエスケープされたJavaScript相当を返します。.
JSEscapeStringは、プレーンテキストデータsのエスケープされたJavaScript相当を返します。.
Mustは、([*Template], error)を返す関数への呼び出しをラップし、 エラーが非nilの場合にパニックを起こすヘルパーです。これは変数の初期化での使用を意図しています。 例えば、
var t = template.Must(template.New("name").Parse("html")).
Newは、指定された名前を持つ新しいHTMLテンプレートを割り当てます。.
ParseFilesは新しい [Template] を作成し、 指定されたファイルからテンプレート定義を解析します。返されるテンプレートの名前は、 最初のファイルの(ベース)名と(解析された)内容になります。少なくとも一つのファイルが必要です。 エラーが発生した場合、解析は停止し、返される [*Template] はnilになります。
異なるディレクトリにある同じ名前の複数のファイルを解析するとき、 最後に指定されたものが結果となります。 例えば、ParseFiles("a/foo", "b/foo")は "b/foo" を "foo" という名前のテンプレートとして保存し、 "a/foo" は利用できません。.
ParseFSは [ParseFiles] や [ParseGlob] と似ていますが、ホストのオペレーティングシステムのファイルシステムではなく、 ファイルシステムfsから読み取ります。 それはグロブパターンのリストを受け入れます。 (ほとんどのファイル名は、自分自身のみにマッチするグロブパターンとして機能することに注意してください。).
ParseGlobは新しい [Template] を作成し、パターンによって識別されたファイルから テンプレート定義を解析します。ファイルはfilepath.Matchのセマンティクスに従ってマッチし、 パターンは少なくとも一つのファイルとマッチしなければなりません。 返されるテンプレートの名前は、パターンによって最初にマッチしたファイルの(ベース)名と (解析された)内容になります。ParseGlobは、パターンにマッチしたファイルのリストで [ParseFiles] を呼び出すのと同等です。
異なるディレクトリにある同じ名前の複数のファイルを解析するとき、 最後に指定されたものが結果となります。.
URLQueryEscaperは、その引数のテキスト表現のエスケープされた値を、 URLクエリに埋め込むのに適した形式で返します。.
# Constants
ErrAmbigContext: "...はURL内の曖昧なコンテキストに現れます" 例: <a href=" {{if .C}} /path/ {{else}} /search?q= {{end}} {{.X}} "> 議論: {{.X}}は曖昧なURLコンテキストにあります。なぜなら、{{.C}}によって、 URLの接尾辞かクエリパラメータのどちらかになる可能性があるからです。 {{.X}}を条件の中に移動すると曖昧さがなくなります: <a href="{{if .C}}/path/{{.X}}{{else}}/search?q={{.X}}">.
ErrBadHTML: "スペース、属性名、またはタグの終わりを期待していましたが、...が得られました", "...は引用符で囲まれていない属性内にあります", "...は属性名内にあります" 例: <a href = /search?q=foo> <href=foo> <form na<e=...> <option selected< 議論: これは、HTML要素のタイプミスが原因であることが多いですが、一部のルーンは、 パーサーの曖昧さを引き起こす可能性があるため、タグ名、属性名、引用符で囲まれていない属性値で禁止されています。 すべての属性を引用符で囲むのが最善の方針です。.
ErrBranchEnd: "{{if}}の分岐が異なるコンテキストで終わります" 例: {{if .C}}<a href="{{end}}{{.X}} 議論: パッケージhtml/templateは、{{if}}、{{range}}、または{{with}}を通じて各パスを静的に調べ、 その後のパイプラインをエスケープします。例は曖昧です。なぜなら、{{.X}}はHTMLテキストノードであるか、 HTML属性のURLプレフィックスである可能性があるからです。{{.X}}のコンテキストは、それをどのようにエスケープするかを 理解するために使用されますが、そのコンテキストは実行時の{{.C}}の値に依存し、それは静的には知られていません。
問題は通常、引用符や角括弧が欠けているなどの問題であり、または、2つのコンテキストをif、range、withの 異なる分岐にリファクタリングすることで回避できます。問題が空であるべきではないコレクションに対する{{range}}にある場合、 ダミーの{{else}}を追加すると役立つことがあります。.
ErrEndContext: "...は非テキストコンテキストで終わります: ..." 例: <div <div title="閉じ引用符なし> <script>f() 議論: 実行されたテンプレートはHTMLのDocumentFragmentを生成するべきです。 閉じタグなしで終わるテンプレートはこのエラーを引き起こします。 HTMLコンテキストで使用すべきでないテンプレート、または不完全なFragmentを生成するテンプレートは、 直接実行すべきではありません。
{{define "main"}} <script>{{template "helper"}}</script> {{end}} {{define "helper"}} document.write(' <div title=" ') {{end}}
"helper"は有効なドキュメントフラグメントを生成しないため、直接実行すべきではありません。.
ErrJSTemplate: "...はJSテンプレートリテラル内に存在します" 例: <script>var tmpl = `{{.Interp}}`</script> 議論: パッケージhtml/templateは、JSテンプレートリテラル内のアクションをサポートしていません。
Deprecated: JSテンプレートリテラル内にアクションが存在する場合、ErrJSTemplateはもはや返されません。 JSテンプレートリテラル内のアクションは、現在予想通りにエスケープされます。.
ErrNoSuchTemplate: "そのようなテンプレートは存在しません ..." 例: {{define "main"}}<div {{template "attrs"}}>{{end}} {{define "attrs"}}href="{{.URL}}"{{end}} 議論: パッケージhtml/templateはテンプレート呼び出しを見てコンテキストを計算します。 ここでは、"attrs"の{{.URL}}は"main"から呼び出されたときにURLとして扱われなければなりませんが、 "main"が解析されたときに"attrs"が定義されていない場合、このエラーが発生します。.
ErrOutputContext: "テンプレート...の出力コンテキストを計算できません" 例: {{define "t"}}{{if .T}}{{template "t" .T}}{{end}}{{.H}}",{{end}} 議論: 再帰的なテンプレートは、開始したときと同じコンテキストで終わらないため、 信頼性のある出力コンテキストを計算することはできません。 名前付きテンプレートのタイプミスを探してみてください。 もしテンプレートが名前付きの開始コンテキストで呼び出されるべきでないなら、 予期しないコンテキストでそのテンプレートへの呼び出しを探してみてください。 再帰的なテンプレートを再帰的でないようにリファクタリングすることも考えてみてください。.
ErrPartialCharset: "未完成のJS正規表現文字セットが...に存在します" 例: <script>var pattern = /foo[{{.Chars}}]/</script> 議論: パッケージhtml/templateは、正規表現リテラルの文字セットへの補間をサポートしていません。.
ErrPartialEscape: "未完成のエスケープシーケンスが...に存在します" 例: <script>alert("\{{.X}}")</script> 議論: パッケージhtml/templateは、バックスラッシュの後に続くアクションをサポートしていません。 これは通常、エラーであり、より良い解決策があります。例えば、 <script>alert("{{.X}}")</script> は動作するはずで、もし{{.X}}が"xA0"のような部分的なエスケープシーケンスであれば、 全体を安全なコンテンツとしてマークします:JSStr(`\xA0`).
ErrPredefinedEscaper: "テンプレートで禁止されている事前定義されたエスケーパー..." 例: <div class={{.
ErrRangeLoopReentry: "範囲ループの再入時に: ..." 例: <script>var x = [{{range .}}'{{.}},{{end}}]</script> 議論: 範囲を通じた反復が、以前のパスと異なるコンテキストで終わるような場合、単一のコンテキストは存在しません。 例では、引用符が欠けているため、{{.}}がJS文字列の内部にあるのか、JS値のコンテキストにあるのかが明確ではありません。 2回目の反復では、次のようなものが生成されます。
<script>var x = ['firstValue,'secondValue]</script>.
ErrSlashAmbig: "'/'は除算または正規表現を開始する可能性があります" 例: <script> {{if .C}}var x = 1{{end}} /-{{.N}}/i.test(x) ? doThis : doThat(); </script> 議論: 上記の例では、最初の'/'が数学的な除算演算子である`var x = 1/-2/i.test(s)...`を生成するか、 最初の'/'が正規表現リテラルを開始する`/-2/i.test(s)`を生成する可能性があります。 分岐内のセミコロンが欠けていないか確認し、どちらの解釈を意図しているか明確にするために 括弧を追加することを検討してみてください。.
OKはエラーがないことを示します。.