On GitHub#/tree/lesson-03
Golang 03 - Adicionando nosso servidor
Criando templates e variáveis de templates.
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.