Sobes.tech
Junior — Middle

Оё имкон дорад маълумотҳоро ба канале, ки арзиши nil дорад, фиристод?

sobes.tech AI

Ҷавоб аз AI

Дар забони Go, имконнопазир аст, ки маълумот ба канал ирсол шавад, агар он nil бошад. кӯшиши ирсол кардани арзиш ба nil-канал, ба блокшавии доимии goroutine оварда мерасонад, зеро чунин канал оғоз нашудааст ва қабул кардани маълумотро наметавонад.

Масалан:

var ch chan int // ch == nil

go func() {
    ch <- 1 // доимӣ блок мешавад
}()

// барнома дар ҳоли ҳозир мемонад

Барои пешгирӣ аз блокшавӣ, бояд каналро пеш аз истифодаи онро инициализатсия кард:

ch := make(chan int)
ch <- 1 // дуруст кор мекунад

Агар канал метавонад nil бошад, пеш аз ирсол, арзишашро санҷед ё бо select бо default кор кунед, то аз блокшавӣ пешгирӣ кунед.