LoginSignup
2
3

More than 5 years have passed since last update.

GAE/Go でテンプレートファイルをソースに埋め込んで扱う & テンプレートファイル更新時に自動で更新する

Posted at

はじめに

  • 前回 の続きで管理画面のテンプレートを文字列からテンプレートファイルに変更する
  • テンプレートファイルは go-bindata を使って Go のソースコードに埋め込んで扱う
  • また godo を使ってテンプレートファイルの更新時に go-bindata を実行してソースコードも更新する

レポジトリ

go-bindata でテンプレートファイルをコードに埋め込む

  • go-bindata をインストールして実行するだけ

インストール

go get -u github.com/jteeuwen/go-bindata/...

実行

go-bindata -o bindata/bindata.go -pkg "bindata" -prefix "templates/" templates/...
  • -o が出力先
  • -pkg で出力するコードのパッケージを指定する
    • デフォルトだと main になってインポートして扱いづらいので任意で指定する
  • -prefix でファイルを呼び出すときに省略する文字列を指定
    • 例のように指定すると templates/index.htmlindex.html だけで呼び出せる
  • 最後の引数の templates/... が埋め込み対象のファイル
    • 例のようにすると templates 以下のファイルが全て対象になる

go-bindata で埋め込んだファイルを扱う

// 生成したコードをインポートし、ファイル名を指定すると []byte が取得できる
bytes, err := bindata.Assets("index.html")

godo でコードの自動生成を行う

インストール

go get -u gopkg.in/godo.v2/cmd/godo

設定ファイルの作成

  • 設定は Go のコードで行う
  • ファイル名は Gododir/main.go とかで固定
Gododir/main.go
package main

import (
    do "gopkg.in/godo.v2"
)

func tasks(p *do.Project) {
    do.Env = `GOPATH=.vendor::$GOPATH`

    p.Task("bindata", nil, func(c *do.Context) {
        c.Run(`go-bindata -o bindata/bindata.go -pkg "bindata" -prefix "templates/" templates/...`)
    }).Src("templates/**/*")
}

func main() {
    do.Godo(tasks)
}

ファイルの変更監視と自動更新を行う

  • Gododir の上のディレクトリで実行
godo bindata --watch
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3