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 criar nosso servidor HTTP, aprender a renderizar HTML utilizando valores providos pelo nosso servidor e, como conteúdo adicional, veremos como atualizar o servidor automaticamente sempre que salvarmos o código.

Ponto de partida

Criando o servidor

Vamos criar nosso servidor utilizando a biblioteca padrão net/http do Go. Primeiro, crie uma pasta chamada server e um arquivo chamado http.go.

mkdir server
cd server
touch http.go

Agora, abra o http.go e adicione o seguinte código:

package server

import (
  "fmt"
  "net/http"
)

type Server struct {
  Port string
}

func NewServer(port string) *Server {
  return &Server{Port: port}
}

func (s *Server) Run() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Servidor rodando!")
  })
  fmt.Println("Servidor rodando na porta:", s.Port)
  http.ListenAndServe(":"+s.Port, nil)
}

Agora, altere o main.go para rodar o servidor:

package main

import "github.com/joaomarcuslf/qr-generator/server"

func main() {
  srv := server.NewServer("8000")
  srv.Run()
}

Execute o código:

go run main.go

Agora acesse http://localhost:8000/ no navegador.

Criando templates

Vamos agora adicionar suporte a templates HTML. Crie um diretório templates e um arquivo index.html:

mkdir templates
touch templates/index.html

No index.html, adicione o seguinte:

<html>
<head>
  <title>{{.Title}}</title>
</head>
<body>
  <h1>{{.Message}}</h1>
</body>
</html>

Agora, modifique o http.go para utilizar esse template:

package server

import (
  "html/template"
  "net/http"
)

type Page struct {
  Title   string
  Message string
}

func (s *Server) Run() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    tmpl, _ := template.ParseFiles("templates/index.html")
    page := Page{Title: "Meu Servidor Go", Message: "Servidor rodando!"}
    tmpl.Execute(w, page)
  })
  http.ListenAndServe(":"+s.Port, nil)
}

Agora, reinicie seu servidor e recarregue a página para ver o HTML sendo renderizado pelo Go.

Atualizando automaticamente o servidor

Podemos usar a ferramenta air para reiniciar o servidor sempre que houver mudanças.

Instale o air:

go install github.com/cosmtrek/air@latest

Crie um arquivo de configuração para o air:

air init

Agora, basta rodar:

air

Isso irá monitorar os arquivos e reiniciar o servidor automaticamente.

Conclusão

Agora temos um servidor HTTP funcional com suporte a templates. Na próxima aula, vamos adicionar rotas dinâmicas para gerar QR Codes diretamente via HTTP.

Lista de aulas