SSRスーパーパワーのロックを解除



ジョンドイルUnsplashによる写真
長年にわたっていくつかの完全なスタックのアプリを開発しながら、私はいくつかのアプリを実現しない
完全な本格的なフロントエンドのアプリケーションを実行する必要があります.これらのアプリのほとんどはサーブ
動的な値を持つ静的コンテンツがここでは、そこに適合.例えば、考慮
あなたのソーシャルメディアフィードは、特定のタイプの各ポストは同じように見えるが
そのユーザに固有のデータが格納されます.彼らはある種のテンプレートを使います
それを達成する.

テンプレートとは


テンプレートは、本質的に動的なコンテンツを作成するために使用されるテキストファイルです.
例えば、以下のJavaScript関数は引数として“name”を受け取ります
異なる文字列を生成します.

囲碁でWebページを生成するのに同じプリンシパルを使用することもできます.Webテンプレート許可
ユーザーにパーソナライズされた結果を提供する.文字列を使用したWebテンプレートの生成
連接は退屈な仕事です.また、注入攻撃につながることができます.

テンプレートを移動


Goには2つのパッケージがあります.
  • text/templates (生成に使用される)
    テキスト出力)
  • html/templates (生成に使用される)
    コード注入に対して安全なHTML出力
  • どちらも基本的に微妙なWeb固有の違いと同じインターフェイスを持っている
    後者では、スクリプトタグをエンコードして実行しないようにする
    ビューでJSONとして.

    最初のテンプレート


    < div >
    < file > :囲碁におけるWebテンプレート
    < OL >
  • テンプレートファイルの拡張子は何でも構いません.私たちは.gohtml それで
    IDEで開発ツールをサポートしています.
  • データアクションまたは制御構造{{ and }} .
    この中で評価されたデータを< em >パイプライン< em/em >と呼びます.彼らの外の何でも、送ります
    を出力します.
  • < OL >
    < 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 .
  • データ構造(ここでは< em > struct < em >)を定義します.それは、何かであるかもしれません
    スライス、マップ、構造体、構造体のスライス、構造体のスライスの構造.私たちは
    それらの各々はまもなく.
  • データは*ドット(別名カーソル)で取得します.の変数にアクセスします
    テンプレート内のデータ.指定されたデータの識別子を開始する必要があります
    with Capital Case . 私たちは
    アクションの内部で変数を初期化する$myCoupon := .Coupon .
  • 実行結果をWebページまたは標準出力に出力できます
    template executeメソッドは、型ライターインターフェイスを実装する任意の値をとります.
  • < OL >
    < 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 >