Aula 01 – Golang para Web – Exemplo básico
Aula 01 – Golang para Web – Exemplo Básico
Voltar para página principal do blog
Todas as aulas desse curso
Aula 02
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Código da aula: Github
Golang para Web
A biblioteca padrão do Go é excepcionalmente rica e bem feita, portanto, não é necessário um framework de terceiros.
Essa é provavelmente uma das maiores diferenças que pessoas vindas de linguagens como Python, Ruby, Java … acham surpreendente.
go-kit
O go-kit é um kit de ferramentas, não um framework.
Ele fornece algumas ferramentas para adicionar microsserviços de alto nível, como log e métricas.
Fora os vários pacotes como o gorilla/mux para roteamento, o net/http.
Mas, são pacotes e não framework.
Vamos colocar a mão na massa.
Vamos escrever um aplicativo Web básico usando go.
Para começar, crie um arquivo para colocar o código nele, ele ficará na raiz do projeto.
Chamaremos esse arquivo de main.go:
web_app/main.go
Depois de criado, abra ele e coloque o seguinte conteúdo:
package main
import(
"fmt"
"log"
"net/http"
)
//request handle
func handler(w http.ResponseWriter, r *http.Request){
fmt.Fprint(w, "Hello world!")
}
func main(){
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8000", nil))
}
Explicação do código
O package main diz qual pacote estamos trabalhando, nesse caso, o pacote principal (main), o pacote onde a função main() está, o ponto de partida da app.
Em seguida temos os imports dos pacotes fmt, log e o net/http
Depois vem a função que manipula a solicitação, um manipulador de Request.
Esta função será usada para toda solicitação feita ao nosso servidor.
O nome da função é handler() e tem como entrada dois objetos: um escritor(writer) de resposta e um objeto solicitação(request) que não retorna nada.
Dentro da handler() nós só vamos ter a impressão através do fmt para o nosso writer de resposta.
Hello world!
Agora a função principal, main().
A função principal começa com uma chamada para http.HandleFunc(), que informa ao pacote http para manipular todas as solicitações para a raiz da web (“/“) com o manipulador.
Em seguida, vem a http.ListenAndServe(), especificando que ele deve escutar na porta 8000 em qualquer interface (“: 8000“). (Não se preocupe com o segundo parâmetro, nil, por enquanto.)
Esta função será bloqueada até o término do programa.
ListenAndServe() sempre retorna um erro quando ocorre um erro inesperado.
Para registrar esse erro, envolvemos a chamada de função com log.Fatal().
A função handler() é do tipo http.HandlerFunc(), ela extende a http.HandlerFunc().
Recebe um http.ResponseWriter e um http.Request como argumentos.
Um valor http.ResponseWriter monta a resposta ao servidor HTTP, escrevendo nele, enviamos os dados para o cliente HTTP, ou seja, o browser.
Um http.Request é uma estrutura de dados que representa a solicitação HTTP do cliente.
Executando nossa aplicação web Golang
Entre na pasta do arquivo pelo cmd ou terminal linux, com:
cd web_app/
Uma vez na pasta onde está o main.go, digite:
go run main.go
Agora acesse no browser:
localhost:8000
Você verá no browser:
Hello world!
Explorando o r.URL.Path
r.URL.Path é o componente caminho das URL de solicitação.
O final [1:] significa “crie uma sub-fatia do Path do primeiro caractere até o fim”.
Isso remove tudo no início do path, até e inclusive o “/“, ou seja, seudominio.com/, no caso do nosso exemplo, localhost/.
Vamos entender melhor com um exemplo.
Modifique o código para que fique assim:
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi everyone, i like %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8000", nil))
}
Agora dê um ctr + c para parar o servidor.
Salve o arquivo com o conteúdo acima.
Agora faça o seguinte teste
Acesse novamente:
localhost:8000
Saída no Browser será:
Hi everyone, i like !
Agora se você acessar o browser passando um /apple no final da url, veja o que acontece:
localhost:8000/apple
Saída no Browser
Hi everyone, i like apple!
O r.URL.Path[1:] pega só o que vem depois do “/” na url passada.