2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Go言語のtemplateは何がツラいのか?

Last updated at Posted at 2020-04-24

はじめに

Go言語でWebアプリを作れるのか調べていたところ、公式のテンプレートエンジンではツラいとあったが、何がツラいのかいまいちわからなかったので、調べてみました。

ツラいこと

  1. templateでレイアウトを継承できない
  2. templateごとにstructを定義しなくてはならない
  3. Viewの関数が用意されていない

解決作

templateでレイアウトを継承できない

これには以下のようにテンプレートを分けて定義して、挿入することで解決できます

package main

import (
	"os"
	"text/template"
)

func main() {
	t := template.Must(template.New("").Parse(templ))
	template.Must(t.Parse(content))
	if err := t.Execute(os.Stdout, nil); err != nil {
		panic(err)
	}
}

// 実際は別ファイル
const templ = `ベーステンプレート
内容: {{template "content"}}
`
// 実際は別ファイル
const content = `{{define "content"}}挿入したいテンプレート{{end}}`

play ground

他にも、header, footerにわけてる方もいました。
Go の html/template でヘッダーやフッター等の共通化を実現する方法

templateごとにstructを定義しなくてはならない

これは解決策は見つけられませんでしたが、そこまで手間でもないのではないでしょうか?

Viewの関数が用意されていない

以下のページにあるようにFuncMapを使えばtemplate側でも使えます。
text/template上で動く計算機を作る #golang
また、template側で関数が必要なのはレイヤー化できてるのか怪しい気もします。

結論

現在の調査の段階ではそんなにツラい内容はなかったように思います。
エスケープなどの処理も自動で入れられて、言語レベルのサポートとしては十分ではないでしょうか?
まだまだGo言語は始めたばかりなので、自分でも実装しつつ調べていきます!

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?