Aula 02 – Golang para Web – Gorilla mux
Aula 02 – Golang para Web – Gorilla mux
Voltar para página principal do blog
Todas as aulas desse curso
Aula 01 Aula 03
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
OBSERVAÇÕES POSTERIORES AO POST ORIGINAL
Antes de seguir
OBS 01. Quem tiver problema com a instalação e imports do Gorilla mux, provavelmente é porque o GO111MODULE=on tá ativado, pra desativar passe para off, pra fazer isso é só rodar:
go env -w GO111MODULE=off
OBS 02. Quem tiver problema no vscode de na hora de salvar uma mudança e as mudanças sumirem, ou por exemplo, alterar a linha sozinha, onde você inseriu determinado import, como se fosse um fenômeno paranormal, faça o seguinte:
1- Digite Ctrl + Shift + p
2 – escolha Preferences: Configure Language Specific Settings e procure por Go na lista e clique nele, vai abrir o settings.json
3 – Configure o editor.formatOnSave para false: “editor.formatOnSave”: false e salve.
Agora podemos instalar o gorilla MUX
Vamos inicializar o diretório atual como a raiz do módulo.
go mod init nome_do_modulo
No meu caso, como eu chamei o app de web_app, então eu executaria o comando assim:
go mod init web_app
Esse comando vai criar o arquivo go.mod que vai inicializar o diretório atual como a raiz do módulo e nos permitirá gerenciar dependências.
Agora você pode rodar o comando abaixo go mod tidy.
go mod tidy
O comando go mod tidy, fará o download de todas as dependências necessárias em seus arquivos de origem e atualizará o arquivo go.mod com essas dependência.
No caso até agora, só o gorilla/mux.
Examine o conteúdo do arquivo go.mod.
Veja que ele tem algo do tipo:
web_app/go.mod
module web_app
go 1.18
require (
github.com/go-redis/redis v6.15.9+incompatible
github.com/gorilla/mux v1.8.0
)
require (
github.com/onsi/ginkgo v1.16.5 // indirect
github.com/onsi/gomega v1.19.0 // indirect
)
Partiu código! 😉
O que vamos fazer:
- 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
OBS 01. Quem tiver problema com a instalação e imports do Gorilla mux ou outros pacotes, provavelmente é porque o GO111MODULE=on tá ativado, pra desativar é só rodar:
go env -w GO111MODULE=auto
Provavelmente vai passar a funcionar.
OBS 02. Quem tiver problema no vscode de na hora de salvar uma mudança, as mudanças sumirem, ou alterar a linha onde você inseriu determinado import por exemplo, faça o seguinte:
1- Digite Ctrl + Shift + p
2 – escolha Preferences: Configure Language Specific Settings e procure por Go na lista e clique nele, vai abrir o settings.json
3 – Configure o editor.formatOnSave para false: “editor.formatOnSave”: false e salve
\o/
Toti