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.

Lista de aulas