Aula 01 - Golang para Web - Exemplo Básico
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:
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.
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:
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:
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:
Saída no Browser
Hi everyone, i like apple!
O
r.URL.Path[1:] pega só o que vem depois do "
/" na
url passada.
Ficamos por aqui!
Código da aula: Github
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
Novamente deixo meus link de afiliados:
Obrigado, até a próxima e bons estudos. ;)