Sobes.tech
Middle

რა შეიძლება გაკეთდეს დახურულ არხთან Go-ში?

sobes.tech AI

პასუხი AI-სგან

بند ٿيل چئنل مان پڙهڻ دوران، توهان باقي بچيل سڀ ڊيٽا حاصل ڪري سگهو ٿا جيڪي بند ڪرڻ کان اڳ لکيا ويا هئا. جڏهن چئنل خالي ٿي وڃي، ته ايندڙ پڙهڻ جون آپريشنون چئنل جي عنصر جي قسم جي صفر قيمت ۽ ٻئي قيمت طور false واپس ڪنديون، جيڪو ظاهر ڪري ٿو ته چئنل بند آهي.

بند ٿيل چئنل ڏانهن ڊيٽا موڪلڻ وقت هلندڙ وقت ۾ پينڪ ٿيندي.

جيڪڏهن توهان اڳ ۾ بند ٿيل چئنل کي ٻيهر بند ڪرڻ جي ڪوشش ڪريو ٿا، ته اهو پڻ هلندڙ وقت ۾ پينڪ ٿيندو.

توهان چئنل جي بند هجڻ جي تصديق ڪري سگهو ٿا، پڙهڻ دوران ok آپريٽر استعمال ڪندي:

package main

import (
	"fmt"
)

func main() {
	ch := make(chan int, 2)
	ch <- 1
	ch <- 2
	close(ch)

	// بند ٿيل چئنل مان پڙهڻ، جيستائين خالي نه ٿئي
	val1, ok1 := <-ch
	fmt.Printf("قيمت: %d, Ok: %t\n", val1, ok1) // قيمت: 1, Ok: true

	val2, ok2 := <-ch
	fmt.Printf("قيمت: %d, Ok: %t\n", val2, ok2) // قيمت: 2, Ok: true

	// چئنل خالي ٿيڻ بعد پڙهڻ
	val3, ok3 := <-ch
	fmt.Printf("قيمت: %d, Ok: %t\n", val3, ok3) // قيمت: 0, Ok: false

	// بند ٿيل چئنل ڏانهن ڊيٽا موڪلڻ جي ڪوشش (پينڪ ٿيندي)
	// ch <- 3 // هن لائن کي ڪمينٽ مان هٽايو، پينڪ ٿيندي

	// اڳ ۾ بند ٿيل چئنل کي ٻيهر بند ڪرڻ جي ڪوشش (پينڪ ٿيندي)
	// close(ch) // هن لائن کي ڪمينٽ مان هٽايو، پينڪ ٿيندي
}

range کي بند ٿيل چئنل سان استعمال ڪرڻ سان، ڊيٽا کي ترتيب وار پڙهڻ جي اجازت ملي ٿي، جيستائين چئنل خالي نه ٿئي، ۽ پوءِ لوپ پاڻمرادو ختم ٿي وڃي ٿو.

package main

import (
	"fmt"
)

func main() {
	ch := make(chan int, 3)
	ch <- 10
	ch <- 20
	close(ch)

	// بند ٿيل چئنل سان `range` جو استعمال
	for val := range ch {
		fmt.Println(val) // 10، پوءِ 20 ڏيکاريندو
	}
}