Use If-Else y cambie la plantilla HTML de Loop Inside en Golang

Jay Singh 20 junio 2023
  1. Use el bucle if-else dentro de las plantillas HTML en Golang
  2. Utilice la plantilla HTML switch Loop Inside en Golang
Use If-Else y cambie la plantilla HTML de Loop Inside en Golang

La plantilla HTML es un paquete Golang (Go) que admite plantillas basadas en datos para crear salidas HTML seguras contra la inyección de código. Una ventaja importante de utilizar HTML/plantilla es que genera una salida HTML segura y con escape mediante el escape automático contextual.

Como resultado, siempre que la salida sea HTML, siempre se debe usar el paquete de plantilla HTML en lugar de una plantilla de texto. Veamos algunos ejemplos de la utilización de if-else y switch en la plantilla HTML.

Use el bucle if-else dentro de las plantillas HTML en Golang

En este ejemplo, creamos dos estructuras para almacenar los datos de los elementos de nuestra lista ToDo: ToDo y PageData. La plantilla HTML definida, tmpl, se crea y analiza.

Finalmente, renderizamos nuestro HTML dándolo a la función Execute(), los datos y la plantilla HTML analizada.

Código:

package main
import (
    "html/template"
    "log"
    "os"
)

type Todo struct {
    Title string
    Done  bool
}

type PageData struct {
    PageTitle string
    Todos     []Todo
}

func main() {
    const tmpl = `
    <h1>{{.PageTitle}}</h1>
    <ul>
        {{range .Todos}}
            {{if .Done}}
                <li>{{.Title}} &#10004</li>
            {{else}}
                <li>{{.Title}}</li>
            {{end}}
        {{end}}
    </ul>`
    t, err := template.New("webpage").Parse(tmpl)
    if err != nil {
        log.Fatal(err)
    }
    data := PageData{
        PageTitle: "Personal TODO list",
        Todos: []Todo{
            {Title: "Task 1", Done: true},
            {Title: "Task 2", Done: false},
            {Title: "Task 3", Done: false},
        },
    }
    t.Execute(os.Stdout, data)
}

Producción :

Personal TODO list
Task 1 ✔
Task 2
Task 3

Utilice la plantilla HTML switch Loop Inside en Golang

Código:

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

func main() {
    const (
        paragraph_hypothesis = 1 << iota
        paragraph_attachment = 1 << iota
        paragraph_menu       = 1 << iota
    )

    const text = "{{.Paratype | printpara}}\n"

    type Paragraph struct {
        Paratype int
    }

    var paralist = []*Paragraph{
        &Paragraph{paragraph_hypothesis},
        &Paragraph{paragraph_attachment},
        &Paragraph{paragraph_menu},
    }

    t := template.New("testparagraphs")

    printPara := func(paratype int) string {
        text := ""
        switch paratype {
        case paragraph_hypothesis:
            text = "This is a hypothesis testing\n"
        case paragraph_attachment:
            text = "This is using switch case\n"
        case paragraph_menu:
            text = "Menu\n1:\n2:\n3:\n\nPick any option:\n"
        }
        return text
    }

    template.Must(t.Funcs(template.FuncMap{"printpara": printPara}).Parse(text))

    for _, p := range paralist {
        err := t.Execute(os.Stdout, p)
        if err != nil {
            fmt.Println("executing template:", err)
        }
    }
}

Producción :

This is a hypothesis testing

This is using switch case

Menu
1:
2:
3:

Pick any option: