65 lines
2.8 KiB
Markdown
65 lines
2.8 KiB
Markdown
|
---
|
||
|
title: Receive data with your web server
|
||
|
localeTitle: Receba dados com seu servidor da web
|
||
|
---
Depois de configurar seu servidor da web e garantir que ele possa exibir algum conteúdo útil, convém torná-lo mais interativo, permitindo que ele aceite dados. Vamos começar escrevendo um 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 quebrar esse código. Primeiramente, começamos importando `net/http` para o servidor web e `html/template` para o modelo. Este artigo pressupõe que você já saiba como criar um modelo no Go. Se você ainda não sabe, leia primeiro o artigo sobre o modelo.
|
||
|
|
||
|
Então criamos um tipo chamado `PAGE` , com um slot chamado `NAME` (isso é uma `string` ). Também criamos uma variável global chamada `page` que é do tipo `PAGE` : a estrutura que acabamos de criar.
|
||
|
|
||
|
Na função `servePage` , há uma coisa realmente importante para este artigo: o método `FormValue` que executamos na `request` .
|
||
|
|
||
|
Antes de continuar, primeiro você precisa saber como um `URL` é criado. Vamos pegar o seguinte `URL` como um exemplo:
|
||
|
```
|
||
|
https://google.com/search?q=free+code+camp
|
||
|
```
|
||
|
|
||
|
Se você inserir o `URL` acima no seu navegador, ele realizará uma pesquisa no Google por `free code camp` . O `URL` é construído assim:
|
||
|
|
||
|
1. `https://` - este é o protocolo
|
||
|
2. `google.com` - este é o nome de domínio e porta (neste caso não há porta mencionada - então o navegador usa a porta padrão para o protocolo)
|
||
|
3. `/search` - este é o caminho
|
||
|
4. `q=free+code+camp` - esta é a `query`
|
||
|
|
||
|
A consulta é a parte sobre a qual falamos neste artigo. O servidor do Google vê esse `URL` e, por causa do atributo `q` na consulta e do valor de `q` - nesse caso, `free+code+camp` - ele sabe onde deve procurar.
|
||
|
|
||
|
Também podemos aplicar isso ao nosso servidor. Vamos acionar o programa e navegar no navegador para:
|
||
|
```
|
||
|
http://localhost:8080/?name=world
|
||
|
```
|
||
|
|
||
|
A resposta será:
|
||
|
```
|
||
|
Hello world!
|
||
|
```
|
||
|
|
||
|
Como é que isso funciona? Bem, nós demos ao `FormValue` um parâmetro de `name` . Desta forma, `FormValue` sabe que queremos o valor do atributo `name` na consulta. Neste caso, isso é `world` , então o método retorna ao `world` . Essa sequência é então colocada na variável de `page` e o modelo faz o resto.
|
||
|
|
||
|
Esta é, obviamente, uma implementação realmente simples dessa função, mas você pode fazer muitas coisas com ela. Por exemplo: você pode aceitar endereços de e-mail e deixar o programa armazená-los em um arquivo.
|