CodeBlanks Logo Icon CodeBlanks

WithDeadline

WithDeadline ile belirli bir zamana bağlı context öğrenirsin.

WithDeadline

WithTimeout göreli süre alırken WithDeadline mutlak bir time.Time alır. Aslında WithTimeout(ctx, d), WithDeadline(ctx, time.Now().Add(d))'nin kısaltmasıdır.

son := time.Date(2026, 12, 31, 23, 59, 0, 0, time.UTC)
ctx, cancel := context.WithDeadline(context.Background(), son)
defer cancel()

if d, ok := ctx.Deadline(); ok {
    fmt.Println("kalan:", time.Until(d))
}

Son tarihi iletmek

ctx.Deadline() ile kalan süre okunup alt sistemlere uyarlanabilir. Örneğin gRPC ve birçok veritabanı sürücüsü ctx'teki son tarihi sunucuya iletir; böylece istemci vazgeçtiğinde sunucu da boşuna çalışmaz. Kalan süre çok kısaysa pahalı bir işe hiç başlamamak da iyi bir optimizasyondur.

Uygulama Geçmiş son tarih

context.WithDeadline'a time.Now().Add(-time.Second) ver. defer cancel() yaz ve ctx.Err() değerini yazdır.

Başlangıç kodu

main.go
package main

import (
    "context"
    "fmt"
    "time"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "context"
    "fmt"
    "time"
)

func main() {
    ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(-time.Second))
    defer cancel()
    fmt.Println(ctx.Err())
}

Beklenen çıktı

context deadline exceeded

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Geçmişte kalan bir tarihle <code>WithDeadline</code> çağrılırsa ne olur?

  • Hiç iptal edilmez
  • Bir gün sonra iptal olur
  • Context hemen iptal edilmiş olarak döner Doğru cevap
  • Panic üretir

Açıklama: Son tarih geçmişse context zaten DeadlineExceeded durumundadır; Done kanalı kapalıdır.

2 Son tarihi oku

Soru
if d, ok := ctx.____(); ok {
    fmt.Println(time.Until(d))
}
Cevap
if d, ok := ctx.Deadline(); ok {
    fmt.Println(time.Until(d))
}

Açıklama: Deadline son tarihi ve bir son tarih ayarlanıp ayarlanmadığını döndürür.

3 Fonksiyon ve argüman

Kavram Anlamı
WithTimeout Göreli süre
WithDeadline Mutlak zaman
ctx.Deadline() Son tarih ve ok
time.Until(d) Kalan süre

Orta seviye bölümündeki tüm dersler