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
	}
}