Rumah >pembangunan bahagian belakang >Golang >Context.Background() vs Context.TODO(): Bilakah Anda Harus Menggunakan Yang Mana?

Context.Background() vs Context.TODO(): Bilakah Anda Harus Menggunakan Yang Mana?

Susan Sarandon
Susan Sarandonasal
2024-11-07 18:18:03466semak imbas

Context.Background() vs Context.TODO(): When Should You Use Which?

Latar Belakang() vs TODO(): Konteks Mana Yang Perlu Anda Gunakan?

Apabila memindahkan kod daripada pakej tanda global kepada pemandu go mongo, fahami yang sesuai penggunaan context.TODO() dan context.Background() adalah penting.

Latar Belakang()

Seperti dalam dokumentasi, context.Background() mengembalikan bukan -tiada, Konteks kosong dengan ciri berikut:

  • Tidak pernah dibatalkan
  • Tiada nilai
  • Tiada tarikh akhir

Ia biasa digunakan dalam fungsi utama, permulaan dan ujian. Apabila tiada konteks bermakna tersedia, context.Background() menyediakan sandaran.

TODO()

context.TODO() juga mengembalikan bukan nol, kosong Konteks. Walau bagaimanapun, tujuan penggunaannya adalah khusus apabila tidak jelas Konteks yang hendak digunakan atau apabila konteks belum tersedia. Dengan menggunakan context.TODO(), anda boleh mendokumentasikan secara eksplisit bahawa anda memerlukan konteks tetapi tidak mempunyai konteks khusus pada masa ini.

Amalan Terbaik

  • Lebih suka menggunakan konteks yang dikaitkan dengan permintaan HTTP anda atau senario khusus aplikasi lain.
  • Gunakan konteks.TODO() dalam situasi di mana tiada konteks yang jelas tersedia tetapi anda masih perlu menunjukkan bahawa konteks diperlukan.
  • Elakkan menggunakan konteks.Latar Belakang() di luar fungsi utama, permulaan atau ujian.

Contoh Penggunaan

Pertimbangkan senario berikut di mana pengendali HTTP perlu melaksanakan pertanyaan MongoDB dalam had masa tertentu:

ctx, cancel := context.WithTimeout(r.Context(), 6 * time.Second)
defer cancel()

// ctx automatically times out after 6 seconds
curs, err := c.Find(ctx, bson.M{"some": "filter"})

Dalam contoh ini, context.WithTimeout() mencipta konteks baharu yang terbit daripada konteks permintaan (r.Context()) . Jika operasi MongoDB melebihi 6 saat, konteks tamat masa, menandakan bahawa pertanyaan harus dibatalkan.

Kesimpulan

Memilih antara konteks.TODO() dan konteks. Background() ialah masalah memahami senario penggunaan khusus dan memastikan anda menyediakan konteks yang bermakna dan sesuai untuk fungsi hiliran.

Atas ialah kandungan terperinci Context.Background() vs Context.TODO(): Bilakah Anda Harus Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn