0Pricing
Go Academy · Aula

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 = 10

Configuraçã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

  1. Fazendo requisições HTTP
  2. Definindo timeouts e cabeçalhos
  3. Decodificando respostas JSON
  4. Tratamento de errors e lógica de novas tentativas
← Voltar para Go Academy