Gin(Golang)의 HTML 템플릿 설명 방법

7257 단어 HTMLGogintemplate

개시하다


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.go
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")
}
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>

브라우저 표시 확인



참조 링크


이걸 보면 조금 더 이해가 되실 것 같아요.
  • gin - HTML rendering
  • golang-text/template 문서
  • Go 웹 프로그래밍 - 7.4 템플릿 처리
  • Hugo - Go Template Primer
  • 좋은 웹페이지 즐겨찾기