Aula 02 – Golang para Web – Gorilla mux

More videos
Views
   

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

Abra um terminal e digite:


go get github.com/gorilla/mux

O que vamos fazer no código:

  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 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

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

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

(Visited 11 times, 1 visits today)
About The Author
-

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>