GOテンプレート


プログラミングのテンプレートは一般的です.長年にわたって、いくつかのよく知られている言語が登場し、数百万によって適応されている.
これらのテンプレート言語のいくつかは非常に特殊なユースケースを持ちますが、他の優れた汎用言語です.Jinja 2は、動的に設定ファイルを作成するために使用可能です.

なぜあなたはテンプレートの構文を学ぶ必要があります


多くの現代的なツールがGOで書かれ、テンプレートを使用することができます.2つの主要なユースケースは、動的構成ファイルと書式設定出力です.
goテンプレートを使用するプロジェクトは次のとおりです.
  • ドック
  • クベルネート
  • ヒューゴ
  • 遊牧民
  • テンプレート
  • ボルト
  • レバント
  • パッカー
  • それは現代のdevopsツールで作業するとき、遅かれ早かれあなたが行くテンプレートに遭遇することを意味します.しばしばそれらを使用して周りの方法がありますが、彼らは全体的なワークフローを大幅に強化することができます.

    始める


    私は読書を推薦するgo template syntax 遊牧民の医者から.
    Goテンプレートを使用して独自のプロジェクトを作成しました.任意のJSON入力をレンダリングするので、それは有用な学習ツールになります.
    あなたが望むならば、あなたはそれをインストールすることができますgo get またはdocker image からdocker hub .

    ブルーブラウン / パイプ


    コマンドラインからJOnテンプレートをJSONにレンダリングする


    パイプ


    コマンドラインからJOnテンプレートをJSONにレンダリングする

    ドック

    curl --silent https://jsonplaceholder.typicode.com/users/1 \
      | docker run --interactive bluebrown/jpipe \
        --newline '{{.name}}'

    ローカル

    go get github.com/bluebrown/jpipe

    用途

    The templates are executed with the text/template package. That means so they are not injection safe while providing greater flexibility for the user. don't execute untrusted templates!

    $ echo '{"place": "bar"}' | jpipe 'lets go to the {{.place}}!'
    lets go to the bar!

    The template is either read from the first positional argument or from a path specified via --template or -t flag.

    echo '{"place": "bar"}' | jpipe --template path/to/template

    The json input is read from pipe or redirection.

    jpipe < path/to/input.json
    curl localhost | jpipe

    フラグ

    -n
    -newline
          print new line at the end
    -t string
    -template string
          alternative way to specify template

    スリ

    Sprig functions have been added to provide more…

    It takes JSON as input from pipe or redirection and passes the data to a template that is either specified from a file or as positional argument.

    By default, the data is rendered in its raw form. It can be an object or array which will become either a map or a slice.

    Basic:

    # object
    $ echo '{ "data": "foo" }' | jpipe
    map[data:foo]
    # array
    $ echo '[1,2]' | jpipe
    [1 2]
    
    テンプレートを位置引数として渡す
    # object
    $ echo '{ "data": "foo" }' | jpipe '{{ .data }}'
    foo
    # array
    $ echo '[1,2]' | jpipe '{{ index . 1 }}'
    2
    

    上級構文


    とは別にbasic syntax nomadのドキュメントでは、以下のテンプレートについての詳細情報です.

    文脈


    そのことを心に留めておくことが大切だ. 常に現在のコンテキストを参照します.デフォルトのテンプレートは実際に次のようになります.
    {{ . }}
    

    関数呼び出し


    囲碁テンプレート機能は、彼らが普通である同じ方法と呼ばれています.ファイルを移動しますが、かっことカンマは削除されます.
    だから普通println(item) なる{{ println . }} . 1以上の引数がある場合は、コンマのないものを追加します.
    {{ printf "the size is %f\n"  . }}
    

    反復処理


    多くの場合、我々は配列の上で、あるいはキーと地図の値さえも範囲にしたい.
    データを繰り返し処理する場合. 現在の反復の項目になります.
    {{ range . }} ... {{ end }}'
    
    変数に代入してインデックスを取得することもできます.
    {{ $index, $element := range . }} ... {{ end }}
    
    オブジェクトのキーと値を反復処理するには、次の構文が使用されます.
    {{ range $key, $val := . }} ... {{ end }}
    

    インデックス関数


    場合によっては、配列の要素をインデックスで調べる必要があります.The index 関数は最初の引数としてスライスをとり、要素のインデックスを2番目の引数として返す.
    {{ index .mySlice 2 }}
    
    返される要素を変数に代入し、テンプレート内のどこかに使用することもできます.
    {{ $item := index .mySlice 2 }}{{ $item.title }}
    
    インデックス関数は、マップ内のキーを検索することもできます.
    {{ index .myMap "some-key" }}
    


    あなたは見ることができますthis example on github .
    以下は、dev . toタグのある記事をレンダリングする別の例です.
    $ curl -s "https://dev.to/api/articles?username=codingsafari&per_page=3" > posts.json
    $ jpipe '### {{ println "Posts\n" }}{{range .}}{{ printf "{%% link %s %%}\n"  .url }}{{end}}' < posts.json
    
    生出力
    ### Posts
    
    {% link https://dev.to/codingsafari/building-production-grade-container-images-3nhg %}
    {% link https://dev.to/codingsafari/advanced-entrypoint-techniques-for-docker-container-3dc %}
    {% link https://dev.to/codingsafari/kubernetes-ingress-controller-gpe %}
    
    レンダリング

    ポスト