Gin(Golang)의 HTML 템플릿 설명 방법
개시하다
Go 언어에 사용되는 웹 프레임 Gin
HTML 렌더링, 템플릿 쓰기 이해하기 어려우니 조금만 설명해 주세요.
환경 등
goo는 설치 전제에서 소개한 거예요.$ go version
go version go1.5.3 linux/amd64
$ mkdir templates
# 以下のテンプレートを編集
$ emacs templates/index.tmpl
# 下記のソースコード編集
$ emacs sample.go
# Ginをインストール
$ go get github.com/gin-gonic/gin
$ go run sample.go
소스 코드
sample.gopackage main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type C struct {
Id int
Name string
}
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*.tmpl")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"a": "a",
"b": []string{"b_todo1","b_todo2"},
"c": []C{{1,"c_mika"},{2,"c_risa"}},
"d": C{3,"d_mayu"},
"e": true,
"f": false,
"h": true,
})
})
router.Run(":8080")
}
index.tmpl<html>
{{/* コメント*/}}
{{/* ドット名前でgoから受け取れる */}}
<h1>{{.a}}</h1>
{{/* ループはrange, ドットで要素にアクセス, endで終了 */}}
<ul>
{{range .b}}
<li>{{.}}</li>
{{end}}
</ul>
{{/* 構造体は、ドットにメンバ名でアクセス */}}
{{range .c}}
<p>{{.Id}}<b>{{.Name}}</b></p>
{{end}}
{{/* 構造体、ループなしなら, ドット変数ドットメンバ */}}
<p>{{.d.Id}}<b>{{.d.Name}}</b></p>
{{/* if文 */}}
{{if .e}}
<p> e true </p>
{{else}}
<p> e false </p>
{{end}}
{{if .f}}
<p> f true </p>
{{else}}
<p> f false </p>
{{end}}
{{/* goソースでgは指定されていない */}}
{{if .g}}
<p> g true </p>
{{else}}
<p> g false </p>
{{end}}
{{/* withはifが真の場合、ドットに情報が設定される */}}
{{with .h}}
<p> h1 {{.}} </p>
{{end}}
{{/* withでなくif使うと、ドットアクセスで特定要素が出力されず */}}
{{if .h}}
<p> h2 {{.}} </p>
{{end}}
{{/* 変数宣言できる */}}
{{/* printf など関数使用可能。fmt.Printfのエイリアス */}}
{{$i := "ii"}}
<p>{{$i}}</p>
<p>{{printf "%s-%s" $i "iii"}}</p>
{{/* defineで定義することも可 */}}
{{define "J"}}
<p>jjj</p>
{{end}}
<hr>
{{/* defineで定義された呼び出しはtemplate */}}
{{template "J"}}
{{/* 不等号比較など、小なりはlt */}}
{{$k := 8}}
{{if lt 5 $k}}
<p> 8 large </p>
{{else}}
<p> 5 large </p>
{{end}}
</html>
브라우저 표시 확인
참조 링크
이걸 보면 조금 더 이해가 되실 것 같아요.
goo는 설치 전제에서 소개한 거예요.
$ go version
go version go1.5.3 linux/amd64
$ mkdir templates
# 以下のテンプレートを編集
$ emacs templates/index.tmpl
# 下記のソースコード編集
$ emacs sample.go
# Ginをインストール
$ go get github.com/gin-gonic/gin
$ go run sample.go
소스 코드
sample.gopackage main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type C struct {
Id int
Name string
}
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*.tmpl")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"a": "a",
"b": []string{"b_todo1","b_todo2"},
"c": []C{{1,"c_mika"},{2,"c_risa"}},
"d": C{3,"d_mayu"},
"e": true,
"f": false,
"h": true,
})
})
router.Run(":8080")
}
index.tmpl<html>
{{/* コメント*/}}
{{/* ドット名前でgoから受け取れる */}}
<h1>{{.a}}</h1>
{{/* ループはrange, ドットで要素にアクセス, endで終了 */}}
<ul>
{{range .b}}
<li>{{.}}</li>
{{end}}
</ul>
{{/* 構造体は、ドットにメンバ名でアクセス */}}
{{range .c}}
<p>{{.Id}}<b>{{.Name}}</b></p>
{{end}}
{{/* 構造体、ループなしなら, ドット変数ドットメンバ */}}
<p>{{.d.Id}}<b>{{.d.Name}}</b></p>
{{/* if文 */}}
{{if .e}}
<p> e true </p>
{{else}}
<p> e false </p>
{{end}}
{{if .f}}
<p> f true </p>
{{else}}
<p> f false </p>
{{end}}
{{/* goソースでgは指定されていない */}}
{{if .g}}
<p> g true </p>
{{else}}
<p> g false </p>
{{end}}
{{/* withはifが真の場合、ドットに情報が設定される */}}
{{with .h}}
<p> h1 {{.}} </p>
{{end}}
{{/* withでなくif使うと、ドットアクセスで特定要素が出力されず */}}
{{if .h}}
<p> h2 {{.}} </p>
{{end}}
{{/* 変数宣言できる */}}
{{/* printf など関数使用可能。fmt.Printfのエイリアス */}}
{{$i := "ii"}}
<p>{{$i}}</p>
<p>{{printf "%s-%s" $i "iii"}}</p>
{{/* defineで定義することも可 */}}
{{define "J"}}
<p>jjj</p>
{{end}}
<hr>
{{/* defineで定義された呼び出しはtemplate */}}
{{template "J"}}
{{/* 不等号比較など、小なりはlt */}}
{{$k := 8}}
{{if lt 5 $k}}
<p> 8 large </p>
{{else}}
<p> 5 large </p>
{{end}}
</html>
브라우저 표시 확인
참조 링크
이걸 보면 조금 더 이해가 되실 것 같아요.
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type C struct {
Id int
Name string
}
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*.tmpl")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"a": "a",
"b": []string{"b_todo1","b_todo2"},
"c": []C{{1,"c_mika"},{2,"c_risa"}},
"d": C{3,"d_mayu"},
"e": true,
"f": false,
"h": true,
})
})
router.Run(":8080")
}
<html>
{{/* コメント*/}}
{{/* ドット名前でgoから受け取れる */}}
<h1>{{.a}}</h1>
{{/* ループはrange, ドットで要素にアクセス, endで終了 */}}
<ul>
{{range .b}}
<li>{{.}}</li>
{{end}}
</ul>
{{/* 構造体は、ドットにメンバ名でアクセス */}}
{{range .c}}
<p>{{.Id}}<b>{{.Name}}</b></p>
{{end}}
{{/* 構造体、ループなしなら, ドット変数ドットメンバ */}}
<p>{{.d.Id}}<b>{{.d.Name}}</b></p>
{{/* if文 */}}
{{if .e}}
<p> e true </p>
{{else}}
<p> e false </p>
{{end}}
{{if .f}}
<p> f true </p>
{{else}}
<p> f false </p>
{{end}}
{{/* goソースでgは指定されていない */}}
{{if .g}}
<p> g true </p>
{{else}}
<p> g false </p>
{{end}}
{{/* withはifが真の場合、ドットに情報が設定される */}}
{{with .h}}
<p> h1 {{.}} </p>
{{end}}
{{/* withでなくif使うと、ドットアクセスで特定要素が出力されず */}}
{{if .h}}
<p> h2 {{.}} </p>
{{end}}
{{/* 変数宣言できる */}}
{{/* printf など関数使用可能。fmt.Printfのエイリアス */}}
{{$i := "ii"}}
<p>{{$i}}</p>
<p>{{printf "%s-%s" $i "iii"}}</p>
{{/* defineで定義することも可 */}}
{{define "J"}}
<p>jjj</p>
{{end}}
<hr>
{{/* defineで定義された呼び出しはtemplate */}}
{{template "J"}}
{{/* 不等号比較など、小なりはlt */}}
{{$k := 8}}
{{if lt 5 $k}}
<p> 8 large </p>
{{else}}
<p> 5 large </p>
{{end}}
</html>
참조 링크
이걸 보면 조금 더 이해가 되실 것 같아요.
Reference
이 문제에 관하여(Gin(Golang)의 HTML 템플릿 설명 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lanevok/items/dbf591a3916070fcba0d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)