SSRスーパーパワーのロックを解除
ジョンドイルUnsplashによる写真
長年にわたっていくつかの完全なスタックのアプリを開発しながら、私はいくつかのアプリを実現しない
完全な本格的なフロントエンドのアプリケーションを実行する必要があります.これらのアプリのほとんどはサーブ
動的な値を持つ静的コンテンツがここでは、そこに適合.例えば、考慮
あなたのソーシャルメディアフィードは、特定のタイプの各ポストは同じように見えるが
そのユーザに固有のデータが格納されます.彼らはある種のテンプレートを使います
それを達成する.
テンプレートとは
テンプレートは、本質的に動的なコンテンツを作成するために使用されるテキストファイルです.
例えば、以下のJavaScript関数は引数として“name”を受け取ります
異なる文字列を生成します.
囲碁でWebページを生成するのに同じプリンシパルを使用することもできます.Webテンプレート許可
ユーザーにパーソナライズされた結果を提供する.文字列を使用したWebテンプレートの生成
連接は退屈な仕事です.また、注入攻撃につながることができます.
テンプレートを移動
Goには2つのパッケージがあります.
テキスト出力)
コード注入に対して安全なHTML出力
後者では、スクリプトタグをエンコードして実行しないようにする
ビューでJSONとして.
最初のテンプレート
< div >
< file > :囲碁におけるWebテンプレート
< OL >
.gohtml
それでIDEで開発ツールをサポートしています.
{{
and }}
.この中で評価されたデータを< em >パイプライン< em/em >と呼びます.彼らの外の何でも、送ります
を出力します.
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/1c141fab593b5c4a66e88ea72cb5589d.js//>
< div >
< file caption >データをテンプレートに実行するためのコードです.出力< file >を参照ください
< tag >複数のファイルをパースすることができます.
ディレクトリ内のすべてのファイルをパースします.例えば:< p/p >
< div class ="ハイライト"
tpl, err := template.ParseFiles(“index1.gohtml”, “index2.gohtml”)
tpl, err := template.ParseGlob("views/templates/*")
< OL >< em > TPL *を実行するためのデータです.複数の場合
テンプレートは、テンプレートの名前は2番目の引数として渡されますが、データを
3 .
スライス、マップ、構造体、構造体のスライス、構造体のスライスの構造.私たちは
それらの各々はまもなく.
テンプレート内のデータ.指定されたデータの識別子を開始する必要があります
with Capital Case . 私たちは
アクションの内部で変数を初期化する
$myCoupon := .Coupon
. template executeメソッドは、型ライターインターフェイスを実装する任意の値をとります.
< tt >出力コンソールのプレーンテキストとしてレンダリングされますが、レスポンスとして送信する場合は< br/>
Webリクエストには、HTMLタグを使用することができるWebページとしてレンダリングされますp >
<数字> < p >
< file caption >標準的なテンプレート出力
<数字> < p >
< file caption > Webテンプレートの出力 <数字>
It is preferred to do the parsing job inside init function and execution at
required places.
< div class ="ハイライト"
func init() {
// Must is a helper that wraps a function returning
// (*Template, error) and panics if the error is non-nil.
tpl = template.Must(template.ParseGlob(“templates/*”))
}
Webテンプレートにおける異なるデータ構造の使用
スライス(あるいは配列)
< br/> < br/>を考えましょう
slice < br/>
文字列: < br/>
<> P >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/4f0ce144b359e876b86cf562c81d248b.js//>
< div >
<囲い>文字列のスライス
< p >これは< br/>内のスライス(配列)を超えてテンプレートで使用することができます.
< em >動作< em >パイプラインの値が長さ0の場合、何も< br/>です
さもなければ、ドット( aka < em > cursor )は< br/>の連続した要素に設定される
スライス(配列)もテンプレートも実行されます.p >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/63066bc2f452786f949de8e1715635a9.js//>
< div >
<高橋潤子>
<数字> < p >
< file caption > Webテンプレートの出力 <数字>
マップ
を考えましょうMap データ< br/>
構造:< p >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/aaebdcc36118a072fbec296c1ed3561c.js//>
< div >
<図説>囲碁における地図
< em >アクション< em/em >内のパイプラインの値はマップです.キー値がない場合
マップ内のペアは何も出力されません.さもなければドット( aka < em > cursor )が< br/>に設定されます.
マップとテンプレートの連続した要素は
$key
各< br/>をとるキー
$val
それぞれの値をとる.キーが基本的な型の場合、< br/>定義された順序(“匹敵する”)、要素はソートされたキー順序で訪問されますbr/>
<> P >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/e6ca1cf146434e879f37ba07bf7b529c.js//>
< div >
< file caption >地図テンプレートのためのWebテンプレート
<数字> < p >
< file caption > Webテンプレートの出力 <数字>
構造
を考えましょうstruct < br/>のコレクションで
宣言されたフィールド
inline :
<> P >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/a56490c78d6ab07d3dd043a26d56c87f.js//>
< div >
<囲碁>における構造
< p >データ構造体のフィールド名.
.Name
は< br/>ですテンプレートの引数.結果はフィールドの値です.フィールド< br/>
呼び出しをチェインする
.Field1.Field2
. フィールドは< br/>で評価できます連鎖を含む変数:
$x.Field1.Field2
. 次のテンプレートは< br/>を示しますフィールドは変数に格納され、その後< em >アクション< em/em >に評価されますp >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/1e856a1a7086c3d16b7698c9fa0f4951.js//>
< div >
<図版> Go <数字>における構造用Webテンプレート
<数字> < p >
<高橋潤子> Webテンプレートの出力 <数字>
構造体の切片
スライスを考慮しましょうstruct S : < br/>
<> P >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/376614730e9074e1f84c581a3f20a1af.js//>
< div >
< file caption >囲碁におけるスライスと構造
< tt >スライスを反復処理する範囲を使用します.動作中のパイプラインの値は< br/>でなければなりません
配列(あるいはスライス).スライスの長さの値がゼロの場合、何も< br/>です
出力さもなければ、ドット( aka < em > cursor )は< br/>の連続した要素に設定される
配列、スライス、テンプレートが実行されますbr/>
<> P >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/adbed8ad28b9bfe2193487df0bfbc625.js//>
< div >
< file caption >構造のスライスのためのWebテンプレート
< P >
このような囲碁のデータ構造を組み合わせて有用な< br/>を作ることができます
テンプレートp >
A note on Conditionals in templates:
It is also possible to write conditionals templates
{{if pipeline}} T1 {{else if pipeline}} T0 {{end}}
like this. This gives us amazing abilities to generate dynamic content. If value of pipeline is empty (that is, false, 0, any nil pointer or interface value, and any array, slice, map, or string of length zero), T0 is executed else T1 is executed.
テンプレートの機能
< tt >関数をGETテンプレートで送るには、デフォルトでは関数は< br/>です.
テンプレートで定義されますが
Funcs
テンプレートのメソッドを使用して< br/>を追加できますこのようなマッピングを作成することによって、関数
< P >
template.Must(template.New(“”).Funcs(fm).ParseFiles(“index.gohtml”))
<> P >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/9757330fd13e19ae1fe59032ef14d410.js//>
< div >
< GF >図形の初期化について
< p >型から関数へのマッピングを作成する
FuncMap
. 各< br/>関数は一つの返り値、あるいは
番目の型はエラーですp >
< div class ="ハイライト"
type FuncMap map[]interface{}
<行> 7 :関数のマッピングを定義しました.fdatemdy <今、この関数は、テンプレートの中で使用することができます.ドットを覚えてる
* cursor )テンプレートに提供されるデータを保持するbr/>
<> P >
< tag > < div class ="LagagCount - gif - Link - tag "
"スクリプトのID "https://gist.github.com/erdahuja/26cb0bd8dd3dcbd191c1832b590dd873.js//>
< div >
< tag >関数を用いたWebテンプレートの作成
これらはgoでテンプレートを使用できる様々な方法です.< br/>の使い方を公開します
ネストしたテンプレートを使用して独自のWebページを構築することはできません.あなたは< br/>
こんにちは私は質問やフィードバックを
ご意見やご意見を残してください.ありがとう!p >
Reference
この問題について(SSRスーパーパワーのロックを解除), 我々は、より多くの情報をここで見つけました https://dev.to/dpkahuja/learn-and-use-templates-in-go-5ceiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol