La plantilla en Golang es una característica robusta para crear contenido dinámico o mostrar resultados personalizados al usuario. Golang tiene dos paquetes con plantillas:
- texto/plantilla
- html/plantilla
Hay principalmente 3 partes de una plantilla que son las siguientes:
1. Acciones
Son evaluaciones de datos, estructuras de control como bucles o funciones. Las acciones están delimitadas por {{ y }} donde el elemento raíz se muestra usando el operador de punto (.) entre llaves, {{.}}. Estas acciones controlan cómo se verá el resultado final.
Para colocar el valor de un campo del objeto de estructura actual, prefije el nombre del campo con un operador de punto (.) entre llaves como {{.FieldName}} . Los datos que se evalúan en su interior se denominan pipeline .
2. Condiciones
La construcción if-else también se puede usar dentro de una plantilla. Por ejemplo, para ejecutar una plantilla solo cuando la condición es verdadera, podemos usar la siguiente sintaxis:
{{if .condition}} temp_0 {{else if .condition}} temp_1 {{else}} temp_2 {{end}}
Esto ejecutará la primera plantilla, temp_0, si la primera condición es verdadera, si la segunda condición es verdadera, entonces se ejecutará la segunda plantilla, temp_1, de lo contrario, se ejecutará la tercera plantilla, temp_2.
3. Bucles
Las iteraciones también se pueden usar dentro de una plantilla usando la acción de rango . La sintaxis para hacer un bucle dentro de una plantilla es:
{{range .List}} temp_0 {{else}} temp_1 {{end}}
Aquí, List debe ser una array, un mapa o un segmento que, si tiene una longitud de 0, se ejecutará la plantilla temp_1; de lo contrario, itera a través de los elementos de List.
El formato de entrada de una plantilla debe tener un formato codificado en UTF-8. Cualquier otro texto exterior se imprime tal como está en la salida estándar. La variable predefinida os.Stdout se refiere a la salida estándar para imprimir los datos combinados. La función Execute() toma cualquier valor que implemente la interfaz de Writer y aplica una plantilla analizada al objeto de datos especificado.
Ejemplo 1:
// Golang program to illustrate the // concept of text/templates package main import ( "os" "fmt" "text/template" ) // declaring a struct type Student struct{ // declaring fields which are // exported and accessible // outside of package as they // begin with a capital letter Name string Marks int64 } // main function func main() { // defining an object of struct std1 := Student{"Vani", 94} // "New" creates a new template // with name passed as argument tmp1 := template.New("Template_1") // "Parse" parses a string into a template tmp1, _ = tmp1.Parse("Hello {{.Name}}, your marks are {{.Marks}}%!") // standard output to print merged data err := tmp1.Execute(os.Stdout, std1) // if there is no error, // prints the output if err != nil { fmt.Println(err) } }
Producción:
Hello Vani, your marks are 94%!
La plantilla de paquete «html/template» proporciona la misma interfaz que «text/template», pero en lugar de tener una salida de texto, implementa plantillas basadas en datos para generar una salida HTML . Esta salida HTML es segura contra cualquier inyección de código externo.
Ejemplo 2:
archivo “index.html”:
<!DOCTYPE html> <html> <head> <title>Results</title> </head> <body> <h1>Hello, {{.Name}}, ID number: {{.Id}}</h1> <p> You have scored {{.Marks}}! <p> </body> </html>
Archivo “main.go”:
// Golang program to illustrate the // concept of html/templates package main import ( "html/template" "os" ) // declaring struct type Student struct { // defining struct fields Name string Marks int Id string } // main function func main() { // defining struct instance std1 := Student{"Vani", 94, "20024"} // Parsing the required html // file in same directory t, err := template.ParseFiles("index.html") // standard output to print merged data err = t.Execute(os.Stdout, std1) }
Producción:
<!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <h1>Hello, Vani, ID number: 20024</h1> <p> You have scored 94! <p> </body> </html>
Publicación traducida automáticamente
Artículo escrito por vanigupta20024 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA