0Pricing
Go Academy · Pelajaran

Context dalam Pemanggilan HTTP dan Basis Data

Meneruskan context di sepanjang rantai pemanggilan

Context dalam Pemanggilan HTTP dan Basis Data adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Klien HTTP dengan konteks

Teruskan konteks ke permintaan HTTP keluar menggunakan req.WithContext(ctx). Permintaan dibatalkan jika konteks dibatalkan sebelum respons tiba.

req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
    if errors.Is(err, context.DeadlineExceeded) {
        // timeout
    }
}

http.NewRequestWithContext

Utamakan http.NewRequestWithContext (Go 1.13+) daripada membuat permintaan lalu memanggil WithContext — cara ini lebih rapi dan menghindari alokasi perantara.

Membatalkan permintaan HTTP

Buat konteks yang dapat dibatalkan dengan WithCancel, teruskan konteks tersebut ke permintaan, lalu panggil cancel saat selesai atau ketika terjadi kesalahan. Klien membatalkan koneksi TCP.

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

database/sql dengan konteks

Semua metode database/sql memiliki varian *Context: QueryContext, ExecContext, dan PrepareContext. Varian-varian ini membatalkan kueri ketika konteks selesai.

rows, err := db.QueryContext(ctx, "SELECT id FROM users WHERE active = $1", true)
if err != nil { return err }
defer rows.Close()

Memeriksa konteks sebelum kueri

Periksa konteks sebelum memulai kueri yang panjang agar dapat segera berhenti jika permintaan sudah dibatalkan.

if err := ctx.Err(); err != nil {
    return err // context already done
}
rows, err := db.QueryContext(ctx, ...)

Konteks dan pengumpulan koneksi

Ketika konteks dibatalkan di tengah kueri, database/sql menandai koneksi sebagai buruk jika pengandar mendukungnya, sehingga koneksi yang rusak tidak dikembalikan ke kumpulan.

gRPC dan konteks

gRPC menggunakan konteks untuk meneruskan tenggat waktu. Klien menetapkan tenggat waktu konteks; server memeriksanya pada setiap penerimaan aliran. Metadata juga diteruskan melalui konteks.

resp, err := client.GetUser(ctx, &pb.GetUserRequest{Id: id})

Konteks permintaan masuk

Server HTTP melampirkan konteks ke setiap permintaan masuk melalui r.Context(). Konteks ini dibatalkan ketika klien terputus.

func handler(w http.ResponseWriter, r *http.Request) {
    ctx := r.Context()
    result, err := db.QueryContext(ctx, query)
}

Konteks dalam rantai perantara

Perantara memperkaya konteks permintaan dengan tenggat waktu, data autentikasi, atau ID pelacakan, lalu meneruskan permintaan yang telah diperkaya ke penangan berikutnya.

Meneruskan konteks melalui pemanggilan layanan

Dalam arsitektur layanan mikro, ID pelacakan dari konteks permintaan masuk harus disisipkan ke semua tajuk HTTP dan RPC keluar agar pelacakan terdistribusi berfungsi dari awal hingga akhir.

Pengujian dengan konteks

Dalam pengujian, gunakan context.Background() atau context.WithTimeout untuk mencegah goroutine bocor di antara kasus pengujian.

Pemeriksaan Singkat

Fungsi mana yang membuat permintaan HTTP dengan konteks terlampir?

Ringkasan: Konteks dalam HTTP dan DB

Poin penting:

  • Gunakan http.NewRequestWithContext untuk pemanggilan HTTP keluar
  • Metode *Context pada database/sql membatalkan kueri saat konteks selesai
  • Gunakan r.Context() pada permintaan masuk; konteks dibatalkan saat klien terputus
  • Teruskan konteks beserta ID pelacakan melalui semua pemanggilan ke bagian hilir

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Context dalam Pemanggilan HTTP dan Basis Data” gratis?

Ya — teks lengkap “Context dalam Pemanggilan HTTP dan Basis Data” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Context dalam Pemanggilan HTTP dan Basis Data”?

Meneruskan context di sepanjang rantai pemanggilan Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Context dalam Pemanggilan HTTP dan Basis Data” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa context.Context Ada
  2. WithCancel dan WithTimeout
  3. WithDeadline dan WithValue
  4. Context dalam Pemanggilan HTTP dan Basis Data
← Kembali ke Go Academy