シーン
時々、テンプレートの構文を使用する必要性は、たとえば、行く時間でhtmlページをレンダリングした後、使用してコード生成テンプレートが行くときに従事するために、たとえば、行きます。トラブルが発生する可能性があります。この時間は、特殊な文字変換が翻訳したものですしたくありません。
書き込みコード・ジェネレータ、「<」記号は、チャネルに関連する問題の一部を生じる、翻訳されたときに私が発生しました。
問題は簡単ですが、あまり情報、私はまた、唯一見つけるのに長い時間のために試してみました。実際には、特殊文字を含む文字列をファイルにtemplate.HTMLタイプに変身し、それをロードします。
解きます
コードを見てください
t := template.New("initMysql")
type NsqConsumerTpl struct {
Names []string
AngleBracket template.HTML
}
v := NsqConsumerTpl{
Names: nsqConsumerIns,
AngleBracket:template.HTML("<")
}
まず、テンプレートを宣言した後、テンプレートをレンダリングするための構造体を宣言します。そのAngleBracketフィールドは、特殊文字のフィールドがテンプレートに翻訳されていないです。ここで、私は「<」置くために使用されます。
次のコードの文テンプレートセクション、およびテンプレート内のこの分野への直接参照、この時間は、「<」に翻訳されることはありません。
tpl := `func (p *NsqConsumerMgr) Start() error {
{{range .Names}}
err := p.{{.}}.ConnectToNSQLookupds(p.{{.}}.LookupAddr)
if err != nil {
panic(err)
}
{{end}}
ch := make(chan bool)
{{ .AngleBracket }}-ch
return nil
}`
t.Execute(tpl, v)
あなたが複数の場所を使用する場合は、機能を前方に置くことができます
定義された関数は、関数がtemp.HTMLタイプSTRに変身するために、非常に簡単です。
func unescaped (str string) template.HTML { return template.HTML(str) }
関数はテンプレートに登録されています。
t = t.Funcs(template.FuncMap{"unescaped": unescaped})
このとき、レンダリングするために使用される構造は、特殊文字は、文字列を直接使用することができます
type NsqConsumerTpl struct {
Names []string
AngleBracket string
}
関数エスケープに渡されるパラメータとしてチャネル(チャネル概念的に類似のLinux)AngleBracketによって:これは|テンプレート{エスケープ} {.AngleBracket}、わずかに異なっています。
func (p *NsqConsumerMgr) Start() error {
{{range .Names}}
err := p.{{.}}.ConnectToNSQLookupds(p.{{.}}.LookupAddr)
if err != nil {
panic(err)
}
{{end}}
ch := make(chan bool)
{{ .AngleBracket | unescaped}}-ch
return nil
}
t.Execute(tpl, v)
比較的簡単に言えば、少しの情報、より激しいチェックし、そして共有するために、これをまとめました。
追加へようこそ
ああ〜のような収穫のポイントを覚えておいてください