65 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Receive data with your web server
 | |
| localeTitle: Recibe datos con tu servidor web
 | |
| ---
 | |
| Una vez que haya configurado su servidor web y se haya asegurado de que pueda ofrecer algún contenido útil, es posible que desee hacerlo más interactivo permitiéndole aceptar datos. Empecemos escribiendo un código:
 | |
| 
 | |
| ```go
 | |
| package main 
 | |
|  
 | |
|  import ( 
 | |
|   "net/http" 
 | |
|   "html/template" 
 | |
|  ) 
 | |
|  
 | |
|  type PAGE struct { 
 | |
|   NAME string 
 | |
|  } 
 | |
|  
 | |
|  var page PAGE 
 | |
|  
 | |
|  func main() { 
 | |
|   http.HandleFunc("/", servePage) 
 | |
|   http.ListenAndServe(":8080", nil) 
 | |
|  } 
 | |
|  
 | |
|  func servePage(writer http.ResponseWriter, reqest *http.Request) { 
 | |
|   page.NAME = request.FormValue("name") 
 | |
|   template := template.New("sayHello") 
 | |
|   template, _ = template.Parse("Hello {{.NAME}}!") 
 | |
|   template.Execute(writer, page) 
 | |
|  } 
 | |
| ```
 | |
| 
 | |
| Vamos a romper este código. En primer lugar, comenzamos importando `net/http` para el servidor web y `html/template` para las plantillas. Este artículo asume que ya sabes cómo crear una plantilla en Go. Si aún no lo sabe, primero debe leer el artículo sobre plantillas.
 | |
| 
 | |
| Luego creamos un tipo llamado `PAGE` , con una ranura llamada `NAME` (esta es una `string` ). También creamos una variable global llamada `page` que es de tipo `PAGE` : la estructura que acabamos de crear.
 | |
| 
 | |
| En la función `servePage` hay una cosa que es realmente importante para este artículo: el método `FormValue` que ejecutamos en la `request` .
 | |
| 
 | |
| Antes de continuar, primero debe saber cómo se `URL` una `URL` . Tomemos como ejemplo la siguiente `URL` :
 | |
| ```
 | |
| https://google.com/search?q=free+code+camp 
 | |
| ```
 | |
| 
 | |
| Si ingresa la `URL` anterior en su navegador, realizará una búsqueda en Google para `free code camp` . La `URL` está construida de esta manera:
 | |
| 
 | |
| 1.  `https://` - este es el protocolo
 | |
| 2.  `google.com` : este es el nombre de dominio y el puerto (en este caso no se menciona ningún puerto, por lo que el navegador usa el puerto predeterminado para el protocolo)
 | |
| 3.  `/search` - este es el camino
 | |
| 4.  `q=free+code+camp` - esta es la `query`
 | |
| 
 | |
| La consulta es la parte de la que hablamos en este artículo. El servidor de Google ve esta `URL` y debido al atributo `q` en la consulta y al valor de `q` , en este caso `free+code+camp` , sabe dónde debe buscar.
 | |
| 
 | |
| También podemos aplicar esto a nuestro servidor. Vamos a encender el programa y navegar por el navegador para:
 | |
| ```
 | |
| http://localhost:8080/?name=world 
 | |
| ```
 | |
| 
 | |
| La respuesta será:
 | |
| ```
 | |
| Hello world! 
 | |
| ```
 | |
| 
 | |
| ¿Como funciona esto? Bueno, le dimos a `FormValue` un parámetro de `name` . De esta manera, `FormValue` sabe que queremos el valor del atributo de `name` en la consulta. En este caso eso es `world` , por lo que el método devuelve `world` . Esa cadena se coloca en la variable de `page` y la plantilla hace el resto.
 | |
| 
 | |
| Esta es, por supuesto, una implementación muy simple de esta función, pero podría hacer muchas cosas con ella. Por ejemplo: podría aceptar direcciones de correo electrónico y dejar que el programa las almacene en un archivo. |