71 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Using templates with your web server
 | |
| localeTitle: Usando plantillas con su servidor web
 | |
| ---
 | |
| Cuando tenga un servidor web, es posible que desee insertar datos en sus respuestas. Veamos un código:
 | |
| 
 | |
| ```go
 | |
| package main 
 | |
|  
 | |
|  import ( 
 | |
|   "net/http" 
 | |
|   "html/template" 
 | |
|  ) 
 | |
|  
 | |
|  type PAGE struct { 
 | |
|   NAME string 
 | |
|  } 
 | |
|  
 | |
|  var page PAGE 
 | |
|  
 | |
|  func main() { 
 | |
|   page.NAME = "Mark" 
 | |
|   http.HandleFunc("/", servePage) 
 | |
|   http.ListenAndServe(":8080", nil) 
 | |
|  } 
 | |
|  
 | |
|  func servePage(writer http.ResponseWriter, reqest *http.Request) { 
 | |
|   template := template.New("sayHello") 
 | |
|   template, _ = template.Parse("Hello {{.NAME}}!") 
 | |
|   template.Execute(writer, page) 
 | |
|  } 
 | |
| ```
 | |
| 
 | |
| Ahora inicie este programa y navegue por su navegador para:
 | |
| ```
 | |
| http://localhost:8080/ 
 | |
| ```
 | |
| 
 | |
| La respuesta será:
 | |
| ```
 | |
| Hello Mark! 
 | |
| ```
 | |
| 
 | |
| Pero, ¿cómo funciona esto y qué hace el código? Bueno, en primer lugar importamos el paquete `net/http` para que podamos ejecutar un servidor web. Luego importamos el paquete `html/template` . Esto habilita una característica llamada plantillas; Y ahí es donde se trata este artículo.
 | |
| 
 | |
| También creamos un tipo llamado `PAGE` , que tiene un campo llamado `NAME` como `string` tipo. También creamos una variable global llamada `page` de tipo `PAGE` , la estructura que acabamos de crear. En la función `main` le damos al campo `NAME` de la `page` un valor de `Mark` - mi nombre, ¡pero no dude en usar su propio nombre!
 | |
| 
 | |
| La función `servePage` es un poco difícil al principio. Vamos a desarmarlo:
 | |
| 
 | |
| ```go
 | |
| func servePage(writer http.ResponseWriter, reqest *http.Request) { 
 | |
|  
 | |
|   // 1. Creating a template 
 | |
|   template := template.New("sayHello") 
 | |
|  
 | |
|   // 2. Filling the template 
 | |
|   template, _ = template.Parse("Hello {{.NAME}}!") 
 | |
|  
 | |
|   // 3. Executing the template 
 | |
|   template.Execute(writer, page) 
 | |
|  } 
 | |
| ```
 | |
| 
 | |
| Qué hacemos aquí? Veamos paso a paso:
 | |
| 
 | |
| 1.  Creamos una _plantilla_ . Debe ingresar un nombre, pero en realidad no importa el nombre que elija. Aquí elegí decir `sayHello` .
 | |
| 2.  Luego llenamos la plantilla con algún texto. Por favor tome nota de la `{{.NAME}}` .
 | |
| 3.  Finalmente, _ejecutamos_ la plantilla. Esto significa que la plantilla se completa y se envía al cliente.
 | |
| 
 | |
| Pero, ¿cómo vamos de `{{.NAME}}` a `Mark` ? Bueno, ¿recuerdas que usamos la variable de `page` como un parámetro para el método `Execute` ? Este método mira los datos en la plantilla y ve `{{.NAME}}` . El `.NAME` indica que debe buscar un campo llamado `NAME` dentro de la variable que se especificó como un parámetro cuando se llamó a `Execute` . En este caso, encuentra ese campo y toma nota de que el valor es `Mark` . `{{` Y `}}` le dicen a `Execute` que debe reemplazar `{{.NAME}}` con el valor que encontró. Así que el resultado final se convertirá en `Hello Mark!` .
 | |
| 
 | |
| Puedes tener múltiples campos y múltiples `{{.XXX}}` . Esta es una manera realmente fácil de insertar datos en las respuestas, ¡y ahora sabe cómo crear una plantilla en Go! |