【GO】ginのシングルバイナリにtemplateを含める


前にginを使ったWEBアプリをシングルバイナリ化をする場合、テンプレートを含めるなら別途実装が必要になると書いた。

現在はgolangでフロント部分を書かない方針だけど、そのうち必要になるかもしれないのでフォルダ内のテンプレートを一括で読むくらいの処理を書いてみました。

具体的にはginのLoadHTMLGlobの置き換えです。

gin.Engine.LoadHTMLGlob(docsrc

まず該当ソースを見てみるとhtml/templateのParseGlobを呼んでいる。

(LoadHTMLFileの場合はParseFiles)

template.Template.ParseGlob(docsrc

filepath.Globで取得ファイル一覧をとってきてparseFilesしている。

つまりテンプレート作成本体はこれ

filepath.Glob(docsrc

ファイルのパターンマッチを返す関数だけど今回は必要ないので流す。

該当ソースコード

Statikからテンプレート読み込み

template.ParseFilesに相当する部分を作ればいいことが分かった。

asset/html/*/*.htmlをテンプレートとして指定していたのでassetをバイナリ化して以下のように書き換えた。

複数フォルダの中身を見に行ってテンプレートをパースしている。

個人的なハマりポイントとしてstatikReaddir(0)は全取得でなく0個取得になるので-1を指定する必要がある(0取得なんてものがあるとは思ってなかった)。

拡張子指定くらいなら簡単そうだけどGlobのような正規表現化は面倒そうなのでしていない。

またデリミタとテンプレート関数の設定をしている場合はginのものでなくhtml/templateの方式で書き直す必要がある。

そこまでしてシングルバイナリにする必要があるのかは微妙です。


コメントを残す

メールアドレスが公開されることはありません。