A linguagem Go é sem dúvidas uma das linguagens mais versáteis que temos nos dias de hoje. Embora algumas pessoas tenham a idéia que ela só serve para desenvolvimento de APIs, nesse post vou mostrar para vocês, como podemos utilizá-la para criar um website.
Servidor
Assim como quando desenvolvemos uma API, o primeiro passo para o desenvolvimento de um website em Go é criar um servidor utilizando o package net/http.
No exemplo abaixo, criamos um servidor apenas com a rota principal.
package main
import (
"fmt"
"net/http"
)
func homePage(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Bem-vindo ao meu website em Go!")
}
func main() {
http.HandleFunc("/", homePage)
fmt.Println("Servidor rodando na porta 8080")
http.ListenAndServe(":8080", nil)
}
Ao executar esse código e acessar http://localhost:8080, receberemos a resposta Bem-vindo ao meu website em Go!
Note que a implementação é praticamente igual se fossemos desenvolver uma API. A única diferença é a forma como finalizamos a função homePage, ou seja, a forma como escolhemos renderizar a resposta do servidor.
Renderizando HTML
Convenhamos, o nosso primeiro exemplo, embora dê uma ideia de que podemos renderizar conteúdo direto no navegador, não ajuda muito quando falamos em desenvolvimento de um website. Afinal, ninguém quer ficar acessando páginas que respondem apenas texto.
A questão daquele exemplo é que a gente precisava partir de algum lugar. Agora que já ficou entendido que, a única mudança entre uma API e um website está na forma de renderizar os dados, vamos incrementar nosso exemplo fazendo-o renderizar uma página HTML.
Primeiramente, precisamos criar um arquivo chamado index.html com o seguinte conteúdo.
<!DOCTYPE html>
<html>
<head>
<title>Página Inicial</title>
</head>
<body>
<h1>{{.Mensagem}}</h1>
</body>
</html>
Note que dentro da tag H1 colocamos uma variável chamada Mensagem. Sua função é renderizar o conteúdo dinâmico respondido pelo servidor.
Para isso, precisamos criar uma struct para transporte dos dados, além de adicionar o package html/template a nossa aplicação.
package main
import (
"html/template"
"net/http"
)
type HomeData struct {
Mensagem string
}
func homePage(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("index.html")
data := HomeData{
Mensagem: "Bem-vindo ao meu website em Go!",
}
t.Execute(w, data)
}
func main() {
http.HandleFunc("/", homePage)
fmt.Println("Servidor rodando na porta 8080")
http.ListenAndServe(":8080", nil)
}
Repare que a variável Mensagem do index.html é na verdade o atributo da struct que criamos para transporte dos dados.
O package html/template é muito completo e oferece uma enorme quantidade de recursos para renderização de templates.
No entanto, para que o post não fique muito extenso, na próxima semana dedicarei um post totalmente à ele.
Conclusão
Go é uma linguagem extremamente capaz para o desenvolvimento web, não se limitando apenas à criação de APIs.
Com exemplos práticos, mostramos como iniciar um servidor web e renderizar HTML dinâmico, provando a versatilidade de Go.
Espero que este guia sirva como um ponto de partida para seus próprios projetos web em Go, incentivando a exploração mais aprofundada das capacidades da linguagem.
Na próxima semana, vamos mergulhar ainda mais nos recursos do html/template, ampliando nossas habilidades em construir sites dinâmicos e interativos com Go.
Até a próxima!
Faça parte da comunidade!
Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.
Livros Recomendados
Abaixo listei alguns dos melhores livros que já li sobre GO.





Me lembrou muito o Twig do PHP.