Definindo timeouts e cabeçalhos
Timeouts do cliente, cabeçalhos personalizados e tokens de autenticação
Definindo timeouts e cabeçalhos é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 2 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.
Limite de tempo no nível do cliente
Defina http.Client.Timeout para limitar o tempo total da requisição e da resposta. Esse é o limite de tempo mais fácil de configurar.
client := &http.Client{Timeout: 10 * time.Second}Limites de tempo no nível do transporte
Ajuste detalhadamente os limites de tempo de estabelecimento da conexão e do handshake TLS por meio de http.Transport:
t := &http.Transport{
DialContext: (&net.Dialer{
Timeout: 5 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
TLSHandshakeTimeout: 5 * time.Second,
ResponseHeaderTimeout: 5 * time.Second,
}
client := &http.Client{Transport: t, Timeout: 30 * time.Second}Limite de tempo baseado em contexto
Os limites de tempo do contexto são específicos de cada requisição e são propagados para as chamadas posteriores. Eles cancelam a requisição quando o prazo termina.
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)Definindo cabeçalhos da requisição
Adicione cabeçalhos a uma requisição com req.Header.Set (substitui) ou req.Header.Add (anexa):
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Accept", "application/json")
req.Header.Set("X-Request-ID", requestID)Cabeçalhos comuns
Content-Type para os corpos das requisições; Accept para o formato de resposta desejado; Authorization para tokens de autenticação; User-Agent para identificar o cliente.
Lendo os cabeçalhos da resposta
Leia os cabeçalhos da resposta usando resp.Header.Get(key):
contentType := resp.Header.Get("Content-Type")
retryAfter := resp.Header.Get("Retry-After")Limite de tempo de conexões ociosas
Defina IdleConnTimeout no transporte para fechar conexões ociosas, evitando que elas se acumulem quando o tráfego diminuir.
t.IdleConnTimeout = 90 * time.Second
t.MaxIdleConnsPerHost = 10Configuração do TLS
Personalize o TLS (versão mínima e certificados do cliente) por meio de tls.Config no transporte:
t.TLSClientConfig = &tls.Config{MinVersion: tls.VersionTLS12}Detectando erros de limite de tempo
Diferencie erros de limite de tempo de erros de rede usando errors.As:
var urlErr *url.Error
if errors.As(err, &urlErr) && urlErr.Timeout() {
// handle timeout
}Limite de tempo por requisição versus do cliente
Client.Timeout se aplica a todas as requisições. Um limite de tempo do contexto é específico de cada requisição e pode ser menor que o limite do cliente. Ambos são respeitados — o menor vence.
Desativando a manutenção de conexões
Defina DisableKeepAlives: true no transporte para programas de curta duração que abrem poucas conexões, evitando o custo do agrupamento de conexões.
Verificação rápida
Quando http.Client.Timeout e um tempo limite de contexto estão definidos, qual deles entra em vigor?
Recapitulação: tempos limite e cabeçalhos
Pontos principais:
- client.Timeout: tempo limite total por solicitação
- context.WithTimeout: tempo limite cancelável e propagado
- req.Header.Set para cabeçalhos personalizados
- Transport para tempos limite detalhados de TLS, conexão e inatividade
Perguntas Frequentes
A aula “Definindo timeouts e cabeçalhos” é grátis?
Sim — o texto completo de “Definindo timeouts e cabeçalhos” é 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 “Definindo timeouts e cabeçalhos”?
Timeouts do cliente, cabeçalhos personalizados e tokens de autenticação 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 2 de 4.
Quanto tempo leva a aula “Definindo timeouts e cabeçalhos”?
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
- Fazendo requisições HTTP
- Definindo timeouts e cabeçalhos
- Decodificando respostas JSON
- Tratamento de errors e lógica de novas tentativas