Rumah >pembangunan bahagian belakang >Golang >Go Context — TODO() vs Background() Tidak lagi mengelirukan!

Go Context — TODO() vs Background() Tidak lagi mengelirukan!

PHPz
PHPzasal
2024-09-10 06:33:32863semak imbas

Go Context — TODO() vs Background() No more confusing!

Dalam Go, pakej konteks membantu mengurus nilai skop permintaan, isyarat pembatalan dan tarikh akhir.
Dua cara biasa untuk memulakan konteks ialah context.TODO() dan context.Background().
Walaupun mereka berkelakuan serupa, mereka mempunyai tujuan yang berbeza.

konteks.Latar Belakang()

context.Background() ialah lalai apabila anda tidak memerlukan sebarang pengendalian khas (seperti pembatalan atau tarikh akhir).
Ia sering digunakan dalam main, init atau semasa memulakan operasi yang tidak memerlukan konteks yang lebih khusus.

Contoh:

 func main() {
     ctx := context.Background()
     server := http.Server{Addr: ":8080", BaseContext: func(net.Listener) context.Context {
         return ctx
     }}
     log.Fatal(server.ListenAndServe())
 }

Dalam contoh ini, context.Background() digunakan untuk mewujudkan konteks asas untuk pelayan HTTP.

konteks.TODO()

context.TODO() ialah konteks pemegang tempat. Gunakannya apabila anda tidak pasti konteks yang hendak diberikan atau semasa merancang untuk memfaktorkan semula nanti.

Contoh:

 func processOrder() {
     ctx := context.TODO() // Placeholder, decision on context pending
     err := db.SaveOrder(ctx, orderData)
     if err != nil {
         log.Println("Failed to save order:", err)
     }
 }

Di sini, context.TODO() digunakan buat sementara waktu untuk operasi pangkalan data sehingga konteks yang lebih khusus ditentukan.

Perbezaan Utama

Kedua-dua fungsi mengembalikan konteks kosong, tetapi ia menyatakan niat yang berbeza:

  • konteks.Latar Belakang(): Digunakan apabila anda yakin tiada ciri konteks khas diperlukan.
  • konteks.TODO(): Konteks pemegang tempat sementara, menandakan perubahan masa hadapan.

Kesimpulan

Bila Gunakan konteks.Latar Belakang():

  • Apabila memulakan perkhidmatan teras seperti pelayan HTTP atau sambungan pangkalan data.
  • Apabila tidak ada keperluan untuk pembatalan, tarikh akhir atau nilai.

Bila Gunakan konteks.TODO():

  • Apabila memfaktorkan semula, dan anda masih belum memutuskan konteksnya.
  • Apabila melaksanakan kod peringkat awal yang memerlukan penambahbaikan pada masa hadapan.

Atas ialah kandungan terperinci Go Context — TODO() vs Background() Tidak lagi mengelirukan!. 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