Sobes.tech
Senior

Чӣ мешавад вақте ки аз канали баста дар Go мехонем?

sobes.tech AI

Ҷавоб аз AI

Go-да хомсдододох каналаас уншихад дараах зүйл тохиолддог:

  • Хэрвээ каналда өгөгдөл байгаа бол, тэдгээрийг хэвийн уншина.
  • Хэрвээ канал хаагдсан бөгөөд өгөгдөл байхгүй бол, унших үйлдэл нь каналаас төрлийн тэгийн утга болон false-г хоёр дахь буцаах утга болгон буцаана (хэрвээ хоёр утга буцаах хэлбэрийг ашиглаж байгаа бол).

Жишээ:

ch := make(chan int)
close(ch)

v, ok := <-ch
fmt.Println(v, ok) // Гарчиг: 0 false

Энэ нь каналыг хаагдсан бөгөөд илүү өгөгдөл гарахгүйг тодорхойлох боломжийг олгодог. Хаагдсан каналаас өгөгдөлгүй уншихад, goroutine блоклогдохгүй бөгөөд шууд тэг утгыг авна.

Хэрвээ хаагдсан каналаас хоёр дахь утгыг шалгалгүй уншвал, тэгийн утгуудыг авах боломжтой бөгөөд энэ нь боловсруулалтын логикт анхаарах чухал юм.