0Pricing
Go Academy · Aula

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

  1. Criando um servidor HTTP
  2. Roteamento e parâmetros de caminho
  3. Padrão de middleware
  4. Desligamento elegante
← Voltar para Go Academy