On GitHub#/tree/lesson-04
Golang 04 - Adicionando rota geradora
Gerando QR code via web.
Essa sequência de aulas irá te ensinar o básico sobre como desenvolver com Golang. Para isso, nós vamos utilizar um repositório no GitHub onde eu vou colocar todos os arquivos que serão utilizados para desenvolver o projeto, assim como as explicações.
Expectativas
Nessa aula, vamos aprender a receber um valor enviado pelo formulário do HTML e como retornar nosso PNG usando a interface de resposta HTTP.
Ponto de partida
Adicionando o gerador
Vamos começar adicionando nossa rota responsável por gerar os QR codes. Crie um novo arquivo dentro de handlers/web
:
touch handlers/web/generator.go
Abra o web/generator.go
e adicione o seguinte código:
package handlers
import (
"net/http"
generator "github.com/joaomarcuslf/qr-generator/services/generators"
)
func GenerateQr(w http.ResponseWriter, r *http.Request) {
qr := generator.NewQRCode()
err := qr.SetBarcode(r.FormValue("dataString")).ToPNG(w)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("Erro ao gerar QR Code: " + err.Error()))
}
}
Agora, vá para server/http.go
e adicione nossa nova rota:
http.HandleFunc("/generator", web.GenerateQr)
Agora, ao submeter um valor no formulário, o QR Code será gerado e retornado via HTTP.
Tratando erros
Para melhorar a experiência do usuário, devemos tratar erros corretamente. Atualize GenerateQr
para exibir mensagens amigáveis em HTML:
func GenerateQr(w http.ResponseWriter, r *http.Request) {
qr := generator.NewQRCode()
err := qr.SetBarcode(r.FormValue("dataString")).ToPNG(w)
if err != nil {
http.Error(w, "Erro ao gerar QR Code: "+err.Error(), http.StatusBadRequest)
return
}
}
Agora, o usuário verá uma resposta HTTP adequada caso ocorra um erro.
Conclusão
Agora temos uma rota funcional para gerar QR Codes via HTTP. No próximo passo, vamos adicionar a biblioteca gin-gonic para transformar essa aplicação em uma API.