Criando um servidor HTTP
ListenAndServe, HandlerFunc e ServeMux
Criando um servidor HTTP é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
Pacote net/http
A biblioteca padrão do Go, net/http, fornece um servidor HTTP/1.1 e HTTP/2 pronto para produção, sem dependências externas.
Servidor básico
Registre um manipulador com http.HandleFunc e comece a escutar com http.ListenAndServe:
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))Interface http.Handler
Qualquer tipo que implemente ServeHTTP(ResponseWriter, *Request) é um http.Handler. Use-o para manipuladores com estado que incorporem um banco de dados ou uma configuração.
type App struct{ db *sql.DB }
func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// use a.db
}ServeMux
http.NewServeMux() cria um roteador isolado. Passe-o para http.ListenAndServe para evitar o multiplexador padrão global, o que é mais seguro em bibliotecas.
mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)Respondendo com códigos de status
Escreva o código de status com w.WriteHeader(code) antes de escrever o corpo. Se você chamar apenas w.Write, o status padrão será 200.
w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))Escrevendo respostas JSON
Defina Content-Type antes de escrever o corpo e, em seguida, codifique-o com json.Encoder:
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)Lendo a requisição
Acesse o método, a URL, os cabeçalhos, os parâmetros de consulta e o corpo por meio da estrutura *Request.
r.Method // "GET", "POST", ...
r.URL.Path // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")Analisando o corpo JSON da requisição
Decodifique o corpo da requisição com json.Decoder. Limite o tamanho do corpo com http.MaxBytesReader para evitar o esgotamento da memória.
r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)Configuração do servidor
Configure limites de tempo com um http.Server personalizado para evitar ataques de clientes lentos:
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
srv.ListenAndServe()HTTPS
Use srv.ListenAndServeTLS(certFile, keyFile) para disponibilizar HTTPS. Os certificados podem ser autoassinados (desenvolvimento) ou obtidos do Let's Encrypt (produção, por meio de golang.org/x/crypto/acme/autocert).
Composição de manipuladores
Envolva manipuladores para adicionar preocupações transversais (registro, autenticação e recuperação) sem modificar a lógica de negócio. Retorne o próximo manipulador após a modificação.
Verificação rápida
Por que você deve definir ReadTimeout e WriteTimeout em um http.Server?
Recapitulação: criação de um servidor HTTP
Pontos principais:
- HandleFunc + ListenAndServe para servidores simples
- http.Server personalizado com limites de tempo para produção
- ServeMux para roteamento isolado
- json.NewEncoder(w) para respostas JSON
Perguntas Frequentes
A aula “Criando um servidor HTTP” é grátis?
Sim — o texto completo de “Criando um servidor HTTP” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Criando um servidor HTTP”?
ListenAndServe, HandlerFunc e ServeMux Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Criando um servidor HTTP”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Criando um servidor HTTP
- Roteamento e parâmetros de caminho
- Padrão de middleware
- Desligamento elegante