typestar

Un cliente HTTP que se rinde en Go

Un cliente compartido con timeout, y una petición que carga un contexto.

var client = &http.Client{Timeout: 10 * time.Second}

func fetch(ctx context.Context, url string) (int, string, error) {
    request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
    if err != nil {
        return 0, "", fmt.Errorf("build request: %w", err)
    }
    request.Header.Set("Accept", "application/json")

    response, err := client.Do(request)
    if err != nil {
        return 0, "", fmt.Errorf("get %s: %w", url, err)
    }
    defer response.Body.Close()

    body, err := io.ReadAll(io.LimitReader(response.Body, 1<<20))
    if err != nil {
        return response.StatusCode, "", fmt.Errorf("read body: %w", err)
    }
    return response.StatusCode, string(body), nil
}

Cómo funciona

  1. Nunca uses http.DefaultClient en producción: no tiene timeout.
  2. NewRequestWithContext es lo que hace funcionar la cancelación.
  3. Cierra el cuerpo, siempre, y drénalo si reutilizas la conexión.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
21
Caracteres a escribir
638
Tokens
175
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 95 segundos.

Escribe este fragmento

Paso 5 de 5 en HTTP; paso 20 de 26 en Biblioteca estándar y estructura del proyecto.

← Anterior Siguiente →