O roteamento da Web é uma técnica de atribuição de solicitações HTTP a funções de manipulador que operam no caminho de URL especificado. O roteamento é frequentemente usado para criar aplicativos de página única (SPAs) e APIs. No roteador, o código define a sequência de ações que acompanham a solicitação de um usuário.

A biblioteca padrão Go tem a maioria das funcionalidades necessárias para criar aplicativos da Web, incluindo roteamento. Você pode usar o ServeMux digite o net/http pacote para manuseio básico de rotas. Se você precisar de um tratamento de rota mais complexo, há muitos pacotes de roteamento para escolher.

Introdução ao roteamento em Go

O ecossistema Go é o lar de pacotes de roteamento que abstraem o desnecessário e facilitam a criação de aplicativos e serviços da Web.

Muitos frameworks da web Go implementam alguns desses pacotes de roteamento.

Aqui está um modelo de estrutura simples para o JSON resposta você retornará ao cliente neste tutorial.

modelo Informações estrutura {
Mensagem corda`json:"mensagem"`
Descrição corda`json:"descrição"`
}
instagram viewer

A maioria dos roteadores Go ainda usa a rede/http Escritor de respostas e Solicitar métodos como parâmetros em funções do manipulador.

funçãoolá(escritor http. ResponseWriter, solicite *http. Solicitar) {
// lógica de negócios da função do manipulador aqui
}

Além disso, você precisará iniciar um servidor com o Ouvir e servir método para iniciar o servidor na maioria dos pacotes.

erro := http. Ouvir e Servir(":8000", roteador)

E se err!= nada {
Retorna
}

Aqui estão alguns dos pacotes de roteamento populares no ecossistema Go.

1. O roteador Gorilla Mux

O pacote Gorilla Mux implementa um roteador de solicitação e um despachante de solicitação para solicitações HTTP. É como o http. ServeMux mas com funcionalidade adicional.

O roteador Gorilla Mux implementa o http. Manipulador interface e seus métodos são compatíveis com o ServeMux método. O pacote também implementa vários esquemas de URL e você pode usar roteadores como subroteadores (rotas aninhadas) para definir rotas semelhantes.

o Gorila Mux pacote faz parte do kit de ferramentas da web Gorilla. O kit de ferramentas inclui pacotes relacionados à web para resolver muitos problemas de mantendo os usuários logados com Sessões ao armazenamento de dados usando Cookies.

Execute este comando no terminal do seu espaço de trabalho para instalar o pacote Gorilla Mux.

vai get -u github.com/gorilla/mux

Veja como você pode configurar um PEGUE request route para uma função de manipulador que codifica uma resposta JSON com o pacote Gorilla Mux.

importar (
"codificação/json"
"github.com/gorilla/mux"
"registro"
"rede/http"
)

funçãoolá(escritor http. ResponseWriter, solicite *http. Solicitar) {
resposta := Informação {
Mensagem: "Sucesso",
Descrição: "Você gravou com sucesso no cliente",
}

erro := json. NewEncoder (escritor).Encode (resposta)

E se err!= nada {
registro. Fataln (err)
}
}

funçãoa Principal() {
roteador := mux. NovoRoteador()
roteador. HandleFunc("/hello", hello).Methods("GET")
erro := http. Ouvir e Servir(":8000", roteador)

E se err!= nada {
Retorna
}
}

o olá função handler codifica o struct para JSON usando o Codificar método do Novo Codificador estrutura.

o a Principal função atribui uma nova instância do roteador Gorilla Mux ao roteador variável. Em seguida, chama o HandleFunc método para mapear a rota para a função do manipulador. Você pode usar o Métodos método para especificar um tipo de solicitação.

2. O roteador Chi

o Chi Router é um roteador leve, rápido e combinável para criar serviços da Web baseados em HTTP em Go. O roteador Chi é compatível com o http pacote e não há dependências externas para o roteador.

Ao contrário de muitos roteadores, o Chi fornece controle de contexto com o contexto pacote para tratamento de solicitação em tempo hábil.

Instale o roteador Chi em seus módulos Go com este comando.

vai obter github.com/vai-chi/chi

O roteamento com o roteador Gorilla Mux e o roteador Chi é muito semelhante. Veja como você pode configurar um similar PEGUE solicitação que codifica struct para JSON como resposta.

importar (
"codificação/json"
"github.com/vai-chi/chi/v5"
"registro"
"rede/http"
)

funçãoa Principal() {
roteador := chi. NovoRoteador()
roteador. Get("/olá", olá)
erro := http. Ouvir e Servir(":8000", roteador)

E se err!= nada {
Retorna
}
}

funçãoolá(escritor http. ResponseWriter, solicite *http. Solicitar) {
resposta := Informação {
Mensagem: "Sucesso",
Descrição: "Você gravou com sucesso no cliente",
}

erro := json. NewEncoder (escritor).Encode (resposta)

E se err!= nada {
registro. Fataln (err)
}
}

o olá função de manipulador é a função de manipulador para o PEGUE solicitar.

No a Principal função, o roteador variável é uma instância do roteador Chi. Você pode especificar um método de solicitação com o nome do método; nesse caso, Pegue recebe a rota e o identificador da função do manipulador como parâmetros.

3. O pacote HttpRouter

o HttpRouterName package é um multiplexador de solicitação leve e de alto desempenho. Ele fornece mais funcionalidade do que o ServeMux implementação do pacote http.

O pacote HttpRouter tem um pequeno volume de memória, alto desempenho e boa escalabilidade. É um dos roteadores mais antigos e usados ​​no ecossistema Go, implementado em muitos estruturas Go populares, Incluindo a biblioteca de Gin.

Executar este comando no terminal do seu diretório de trabalho instalará o pacote HttpRouter.

vai obtenha github.com/julienschmidt/httprouter

O roteamento com o HttpRouter difere ligeiramente dos roteadores Chi e Gorilla Mux.

Veja como você pode configurar uma solicitação GET simples com o pacote HttpRouter.

importar (
"codificação/json"
"github.com/julienschmidt/httprouter"
"registro"
"rede/http"
)

funçãoa Principal() {
roteador := httprouter. Novo()
roteador. GET("/olá", olá)
erro := http. Ouvir e Servir(":8000", roteador)

E se err!= nada {
Retorna
}
}

funçãoolá(escritor http. ResponseWriter, solicite *http. Pedido, _ httprouter. Parâmetros) {
resposta := Informação {
Mensagem: "Sucesso",
Descrição: "Você atingiu com sucesso o endpoint da API",
}

erro := json. NewEncoder (escritor).Encode (resposta)

E se err!= nada {
registro. Fataln (err)
}
}

As funções do manipulador para o pacote HttpRouter devem ter o Parâmetros método do roteador HTTP.

o roteador variável é uma instância de HttpRouter. Você pode configurar uma solicitação GET com o PEGUE método que recebe a rota e o identificador da função do manipulador.

4. O roteador Pat

Pat é um multiplexador de solicitação HTTP no estilo Sinatra que funciona com o pacote net/http do Go. O roteador Pat não possui outras funcionalidades além do roteamento.

Execute este comando em seu diretório de trabalho para instalar o Pat Router

vai obtenha github.com/bmizerany/pat

O roteador Pat implementa funcionalidades semelhantes ao roteador ServeMux método.

Veja como você pode lidar com o roteamento de solicitações com o tapinha pacote.

importar (
"codificação/json"
"github.com/bmizerany/pat"
"registro"
"rede/http"
)

funçãoolá(escritor http. ResponseWriter, solicite *http. Solicitar) {
resposta := Informação {
Mensagem: "Sucesso",
Descrição: "Você atingiu o endpoint com sucesso",
}

erro := json. NewEncoder (escritor).Encode (resposta)

E se err!= nada {
registro. Fataln("err")
}
}

funçãoa Principal() {
roteador := pat. Novo() // instância do roteador
roteador. Get("/olá", http. HandlerFunc (olá))
http. Handle("/", roteador)
erro := http. Ouvir e Servir(":12345", nada)

E se err!= nada {
registro. Fatal("Ouvir e servir: ", err)
}
}

o Novo retorna uma instância de roteador. Você terá que envolver a função do manipulador com o HandlerFunc método. Você pode então usar o Lidar com método para especificar um caminho raiz e montar a instância do roteador antes de iniciar um servidor.

Construir um roteador não é tão difícil

Todos os roteadores neste artigo implementam a funcionalidade dos pacotes net e http. Você pode conferir a documentação do método ServeMux para saber como replicar um roteador com funcionalidade extra para atender às suas necessidades.

Frameworks como Gin e Fiber incluem funcionalidade de roteamento do pacote net ou pacotes externos que o implementam.