テンプレート
ウェブサイトの動的なページを書くとき、私たちはしばしば、提案テンプレートの不変の一部となり、バックエンドプログラムをレンダリングすることにより、動的なWebページを生成するための可変部分、golangは支援テンプレートのレンダリングにHTML /テンプレートパッケージを提供します。
変数
golangレンダリングテンプレートは型インターフェース{}の変数を受け入れることができたとき、私たちは、テンプレート・ファイル内の変数の値を読み込み、テンプレートをレンダリングすることができます。
渡された引数の2つの一般的な種類があります。構造体である、レンダリングするテンプレート構造体フィールドの内容で読み取ることができます。レンダリングするために使用することができるテンプレート・キー内の地図[ストリング]インターフェースは{}があります。
第二の一般的な使用は、効率がなく利便性、に弱いかもしれません。
テンプレートの構文の中に埋め込まれた{{}}マークに追加するすべての必要性をサポートしています。
テンプレートファイル、現在の変数の代表、すなわち非環式ボディ。渡された変数に代わってで。我々は構造を定義するとします
type Article struct {
ArticleId int
ArticleContent string
}
その後、我々は、テンプレート内の次のことができます。
<p>{{.ArticleContent}}<span>{{.ArticleId}}</span></p>
キャプチャし、テンプレートに変数の内容をレンダリングします。上記構成のコンテンツが情報でarticleIDあると仮定:1 ArticleContent:「こんにちは」にレンダリングされたテンプレートが対応の内容:
<p>hello<span>1</span></p>
それは非常に簡単ではありません。
もちろん、時には我々は、我々は書くことができ、それが「こんにちは」に初期化されている間、たとえば、私たちは、変数の記事を定義する必要があり、変数を定義する必要があります。
{{$article := "hello"}}
私たちは、あなたが書くことができます記事に割り当てられたコンテンツの値を渡したいと仮定します。
{{$article := .ArticleContent}}
我々は唯一の{{$記事を}}を使用して、あなたは、この変数の内容を取得することができます。
機能
golangテンプレート関数が、実際には非常に限られている、多くの複雑なロジックを直接表現するために、テンプレートの構文を使用することはできません、あなただけのバイパスにテンプレート機能を使用することができます。
まず、機能のサポートカスタムセットにするとき.Funcs道のフォローアップテンプレートレンダリングされたファイルを直接これらの関数を呼び出すサポートされていることで、テンプレートに新しいテンプレートを作成するためのテンプレートパッケージ。
関数のこのセットは、次のように定義されます。
type FuncMap map[string]interface{}
キーは、値が関数であった、メソッドの名前です。ここでは、関数のパラメータの数は限定されないが、制限の戻り値。2つのオプションがあり、一つは、2つの戻り値戻り値があるだけですが、第2の戻り値は、エラーのタイプでなければなりません。これら二つの機能の差は機能をテンプレートに呼ばれる第二時間で、テンプレート関数戻り、次にレンダリングステップがエラーで中断され、2番目のパラメータが空ではないと仮定する。
テンプレートファイルには、メソッドを呼び出すことは非常に簡単です:
{{funcname .arg1 .arg2}}
私たちは関数を定義すると仮定します。
func add(left int, right int) int
そして、テンプレートファイルで、呼び出すこと:
{{add 1 2}}
あなたは得ることができます:
3
裁判官
裁判官は、判決の最も簡単なbool型と文字列型は、現在サポートされている場合、テンプレートもgolang条件をサポートしています。
{{if .condition}}
{{end}}
.condition bool型時間は、実行することが本当だった場合には、とき.condition文字列型のため、表現が非空で実行されます。
ネストされた場合はもちろん、また、それ以外の他のサポートされています。
{{if .condition1}}
{{else if .contition2}}
{{end}}
最も一般的に使用される機能の一部がビルトインされているテンプレート、判定した場合、私たちは、この作業を行うには、いくつかの組み込みのテンプレート関数必要、我々はなどなど、同じサイズを伴うまたは伴わないような論理を、必要があるとします:
非ません
{{if not .condition}}
{{end}}
とと
{{if and .condition1 .condition2}}
{{end}}
または或
{{if or .condition1 .condition2}}
{{end}}
EQ等しいです
{{if eq .var1 .var2}}
{{end}}
NE等しくありません
{{if ne .var1 .var2}}
{{end}}
未満のLT(未満)
{{if lt .var1 .var2}}
{{end}}
ル以下で
{{if le .var1 .var2}}
{{end}}
よりGT大きいです
{{if gt .var1 .var2}}
{{end}}
GEより大きいまたは等しいです
{{if ge .var1 .var2}}
{{end}}
循環
トラバースマップにテンプレート支持サイクルのgolang範囲、スライス内のコンテンツ、構文は次のとおりです。
{{range $i, $v := .slice}}
{{end}}
この範囲のサイクルの中で、我々はIVを横断の値にアクセスすることができ、にナビゲートする方法があります:
{{range .slice}}
{{end}}
このように、対応する値にアクセスする必要がキーまたはインデックス値にアクセスしない.:
{{range .slice}}
{{.field}}
{{end}}
もちろん、我々はここで使用。トラバースへの値のアクセスを、私たちが望むようにアクセス外部変数にする方法を行うには?私たちは外部の変数にアクセスするために$を使用する必要がある、(このようなテンプレートの着信変数のレンダリングなど):
{{range .slice}}
{{$.ArticleContent}}
{{end}}
ネストされたテンプレート
テンプレートを書くときには、そのようなすべてのページのように、私たちが多い一般的なテンプレートの統合は、すべてのページがインポートされているように、私たちは多くの場合、独立したモジュールとして書かれ、ナビゲーションバーとフッターを持っているので、あなたは、繰り返しをしないでください準備。
任意のWebページには、マスターテンプレートを持っているし、我々は、モジュールの共有を実現するために、メインサブテンプレートテンプレート内に埋め込むことができます。
テンプレートを使用すると、子テンプレートを紹介したい場合は、我々は次の文を使用します。
{{template "navbar"}}
この方法は、それはサブテンプレートのナビゲーションバーの名前をロードしようとしますが、我々はまた、「ナビゲーションバー」このサブテンプレートを達成するために、サブテンプレートを定義する必要があります。
サブテンプレートとして定義されます:
{{define "navbar"}}
{{end}}
コンテンツがカバーとの間に定義される{{テンプレート「ナビゲーションバー」}}
もちろん子供はテンプレートから分離され、その後、子供はテンプレート変数の親テンプレートにそれを得ることができますか?これは、もちろん、我々は使用する必要があり、
{{template "navbar" .}}
変数は、現在のサブテンプレートに渡すことができ、これは非常に便利です。