Aula 02 – Golang para Web – Gorilla mux

Aula 02 – Golang para WebGorilla mux

Voltar para página principal do blog

Todas as aulas desse curso

Aula 01                       Aula 03

Golang para Web - Gorilla mux

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

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:

  1. Vamos subir a função main() para o topo, logo depois dos imports;
  2. Inserir o import do gorilla MUX;
  3. Criar uma instância do roteador do gorilla;
  4. Usar o HandleFunc() do router do gorilla ao invés do http, para GET, em 3 rotas:
    1. /contact
    2. /about
    3. /
  5. Dizer ao http que queremos usar o roteador do gorilla MUX como padrão.
  6. Definir as funções manipuladoras de solicitações GET para as rotas:
    1. index
    2. contact
    3. 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

E acessar:

localhost:8000/

localhost:8000/contact

localhost:8000/about

Ficamos por aqui!

Código da aula: Github

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

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. 😉

About The Author
-

3 Comentários

  • Edvaldo Evangelista
    Reply

    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

  • toticavalcanti
    Reply

    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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>