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:
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
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!