Go Academy · Lektion

Indstilling af timeouts og headers

Client-timeouts, brugerdefinerede headers og auth-tokens

Lektion 2 af 413 trin

Indstilling af timeouts og headers er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.

Tidsgrænse på klientniveau

Angiv http.Client.Timeout for at begrænse den samlede tid for anmodning og svar. Dette er den letteste tidsgrænse at konfigurere.

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

Tidsgrænser på transportniveau

Finjuster tidsgrænser for oprettelse af forbindelser og TLS-håndtryk via 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}

Kontekstbaseret tidsgrænse

Tidsgrænser i kontekst gælder pr. anmodning og videreføres til efterfølgende kald. De annullerer anmodningen, når tidsfristen udløber.

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)

Angivelse af anmodningsheadere

Føj headere til en anmodning med req.Header.Set (erstatter) eller req.Header.Add (tilføjer):

req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Accept", "application/json")
req.Header.Set("X-Request-ID", requestID)

Almindelige headere

Content-Type til anmodningsindhold; Accept til det ønskede svarformat; Authorization til godkendelsestokens; User-Agent til identifikation af klienten.

Læsning af svarheadere

Læs svarheadere fra resp.Header.Get(key):

contentType := resp.Header.Get("Content-Type")
retryAfter := resp.Header.Get("Retry-After")

Tidsgrænse for inaktive forbindelser

Angiv IdleConnTimeout på transporten for at lukke inaktive forbindelser og forhindre, at de hober sig op, når trafikken falder.

t.IdleConnTimeout = 90 * time.Second
t.MaxIdleConnsPerHost = 10

TLS-konfiguration

Tilpas TLS (minimumsversion, klientcertifikater) via tls.Config på transporten:

t.TLSClientConfig = &tls.Config{MinVersion: tls.VersionTLS12}

Registrering af fejl ved tidsgrænser

Skeln mellem fejl på grund af tidsgrænser og netværksfejl ved hjælp af errors.As:

var urlErr *url.Error
if errors.As(err, &urlErr) && urlErr.Timeout() {
    // handle timeout
}

Tidsgrænse pr. anmodning kontra klientens tidsgrænse

Client.Timeout gælder for hver anmodning. En tidsgrænse i kontekst gælder pr. anmodning og kan være kortere end klientens tidsgrænse. Begge overholdes — den korteste gælder.

Deaktivér forbindelsesgenbrug

Angiv DisableKeepAlives: true på transporten for kortlivede programmer, der åbner få forbindelser, så overheadet ved forbindelsespooling undgås.

Hurtig kontrol

Når både http.Client.Timeout og en timeout for en kontekst er angivet, hvilken af dem træder så i kraft?

Opsummering: Tidsgrænser og headere

Vigtige punkter:

  • client.Timeout: samlet tidsgrænse pr. forespørgsel
  • context.WithTimeout: annullerbar tidsgrænse, der videresendes
  • req.Header.Set til brugerdefinerede headere
  • Transport til detaljerede tidsgrænser for TLS, opkald og inaktive forbindelser
Gratis at komme i gang

Lær Go med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Indstilling af timeouts og headers” gratis?

Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Indstilling af timeouts og headers”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Indstilling af timeouts og headers”?

Client-timeouts, brugerdefinerede headers og auth-tokens Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Go Academy?

Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Indstilling af timeouts og headers”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Go Academy-lektion?

Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Afsendelse af HTTP-requests
  2. Indstilling af timeouts og headers
  3. Afkodning af JSON-responses
  4. Fejlhåndtering og retry-logik
← Tilbage til Go Academy