Skip to content

Instantly share code, notes, and snippets.

@gsw945
Last active September 5, 2023 10:10
Show Gist options
  • Select an option

  • Save gsw945/c74340bd9ff8236044b77f284e914ed5 to your computer and use it in GitHub Desktop.

Select an option

Save gsw945/c74340bd9ff8236044b77f284e914ed5 to your computer and use it in GitHub Desktop.

Revisions

  1. gsw945 revised this gist Sep 5, 2023. 1 changed file with 45 additions and 0 deletions.
    45 changes: 45 additions & 0 deletions go-template-child.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,45 @@
    package main

    import (
    "fmt"
    "html/template"
    "os"
    )

    func main() {
    const parentTemplate = `
    {{define "child"}}
    <p>Name: {{.Name}}, Age: {{.Age}}</p>
    {{end}}
    <!DOCTYPE html>
    <html>
    <head>
    <title>Parent Template</title>
    </head>
    <body>
    {{template "child" .}}
    </body>
    </html>
    `

    parentData := struct {
    Name string
    Age int
    }{
    Name: "John",
    Age: 30,
    }

    tmpl, err := template.New("parent").Parse(parentTemplate)
    if err != nil {
    fmt.Println("Error parsing parent template:", err)
    return
    }

    err = tmpl.Execute(os.Stdout, parentData)
    if err != nil {
    fmt.Println("Error executing parent template:", err)
    return
    }
    }
  2. gsw945 created this gist Sep 5, 2023.
    72 changes: 72 additions & 0 deletions go-template-multi.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,72 @@
    package main

    import (
    "encoding/json"
    "fmt"
    "os"
    "text/template"
    )

    type TreeNode struct {
    Name string `json:"name"`
    MetaInfo string `json:"metaInfo"`
    }

    type MetaItem struct {
    Name string `json:"name"`
    Value interface{} `json:"value"`
    }

    func ParseMetaInfo(metaInfo string) []MetaItem {
    var metaItems []MetaItem
    json.Unmarshal([]byte(metaInfo), &metaItems)
    return metaItems
    }

    func main() {
    const tmplStrName1 = `{{- define "name1"}}Name: {{.Name}}{{- end}}`
    const tmplStrMeta1 = `{{- define "meta1"}}- Name: {{.Name}}, Value: {{.Value}}{{- end}}`
    const tmplStr = `{{template "name1" .}}
    MetaInfo:
    {{- range $index, $meta := parseMetaInfo .MetaInfo }}
    {{template "meta1" $meta}}
    {{- end}}`

    tmplFuncs := template.FuncMap{
    "parseMetaInfo": ParseMetaInfo,
    }

    tmpl := template.New("example").Funcs(tmplFuncs)

    var tmplName1 = tmpl.New("name1")
    _, err := tmplName1.Parse(tmplStrName1)
    if err != nil {
    return
    }

    var tmplMeta1 = tmpl.New("meta1")
    _, err = tmplMeta1.Parse(tmplStrMeta1)
    if err != nil {
    return
    }

    tmpl, err = tmpl.Parse(tmplStr)
    if err != nil {
    fmt.Println("Error parsing template:", err)
    return
    }

    jsonStr := `{
    "name": "root",
    "metaInfo": "[{\"name\":\"size\",\"value\":3344},{\"name\":\"type\",\"value\":\"hidden\"}]"
    }`

    var node TreeNode
    err = json.Unmarshal([]byte(jsonStr), &node)
    if err != nil {
    fmt.Println("Error parsing JSON:", err)
    return
    }

    tmpl.Execute(os.Stdout, node)
    }