Aula 02 – Golang para Web – Gorilla mux
Voltar para página principal do blog
Todas as aulas desse curso
Aula 01 Aula 03

Go para Web – Gorilla mux
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
Adicionando endpoints com gorilla MUX
Um endpoint de um web service é a URL onde o serviço pode ser acessado.
Para adicionar mais endpoints vamos utilizar o pacote gorilla MUX.
O mux implementa um roteador e um despachante de solicitação.
O nome mux significa “multiplexador de solicitação HTTP“.
Como o http.ServeMux padrão, o mux.Router combina solicitações recebidas em uma lista de rotas registradas e chama um manipulador para a rota que corresponde à URL ou a outras condições.
Instalação do gorilla MUX
Abra um terminal e digite:
go get github.com/gorilla/mux
O que vamos fazer no código:
- Vamos subir a função main() para o topo, logo depois dos imports;
- Inserir o import do gorilla MUX;
- Criar uma instância do roteador do gorilla;
- Usar o HandleFunc() do router do gorilla ao invés do http, para GET, em 3 rotas:
- /contact
- /about
- /
- Dizer ao http que queremos usar o roteador do gorilla MUX como padrão.
- Definir as funções manipuladoras de solicitações GET para as rotas:
- index
- contact
- about
package main
import(
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
)
func main(){
r := mux.NewRouter()
r.HandleFunc("/contact", contactHandler).Methods("GET")
r.HandleFunc("/about", aboutHandler).Methods("GET")
r.HandleFunc("/", indexHandler).Methods("GET")
http.Handle("/", r)
log.Fatal(http.ListenAndServe(":8000", nil))
}
//request index page handle
func indexHandler(w http.ResponseWriter, r *http.Request){
fmt.Fprint(w, "This is the index page!")
}
//request contact page handle
func contactHandler(w http.ResponseWriter, r *http.Request){
fmt.Fprint(w, "This is the contact page!")
}
//request about page handle
func aboutHandler(w http.ResponseWriter, r *http.Request){
fmt.Fprint(w, "This is the about page!")
}
Nas funções que lidam com as solicitações, isto é, as requests, nossas funções: indexHandler, contactHandler e aboutHandler, recebem um w http.ResponseWriter, que é uma interface ResponseWriter, usada pelo Handle HTTP para construir uma resposta HTTP.
Recebe também um http.Request, que é uma solicitação que representa uma request HTTP recebida por um servidor ou a ser enviada por um cliente.
O w http.ResponseWriter é uma interface e os tipos existentes que implementam essa interface são ponteiros.
Isso significa que não há necessidade de usar um ponteiro para esta interface.
O r *http.Request não precisa ser necessariamente um ponteiro, mas, não é prático usar ele sem sê-lo, pelo menos não em um servidor http go.
Por isso o asterisco, porque estamos usando ele como é recomendado, como ponteiro.
O http.Request não é uma interface, é apenas uma estrutura, como queremos alterar a estrutura e fazer com que o servidor da Web veja essas alterações, ele deve ser usado como um ponteiro.
Se fosse apenas um valor struct, modificaríamos apenas uma cópia dele.
Para maiores informações sobre interfaces go acesse:
https://www.airs.com/blog/archives/281
Agora vamos rodar nossa aplicação:
go run main.go
Bom dia,
Não consigo instalar pacote GORILLA MUX
Abaixo erro..
C:\Users\edval>go get github.com/gorilla/mux
go: missing Git command. See https://golang.org/s/gogetcmd
package github.com/gorilla/mux: exec: “git”: executable file not found in %PATH%
Agradeço sua colaboração
Edvaldo Evangelista
Olá Edvaldo, o erro é porque você não tem o git instalado na sua máquina, aqui no código fluente tem um mini curso de git, na aula 01 mostra como instalar: https://www.codigofluente.com.br/aula-01-mini-curso-de-git/
Qualquer coisa fala aí se não conseguir. \o/ Toti