Sobes.tech
Senior

Төмөндө көрсөтүлгөн код бөлүктөрүнүн кайсы бири каналдар менен иштөөдө кате же потенциалдуу көйгөйдү камтыйт? 1-чи вариант package main func main() { ch := make(chan int) ch <- 1 } 2-чи вариант package main func main() { ch := make(chan int, 1) ch <- 1 } 3-чи вариант package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } 4-чи вариант package main func main() { ch := make(chan int) close(ch) <-ch } 5-чи вариант package main func main() { ch := make(chan int, 3) ch <- 4 }

sobes.tech AI

AIден жооп

Xato Variant 1-dədir:

package main
func main() {
    ch := make(chan int)
    ch <- 1
}

Burada, buffer olmayan kanal yaradılır ch := make(chan int). Bu kanala ch <- 1 göndərilməsi, kimsə kanaldan oxuyana qədər bloklanır. Bu kodda heç bir qəbul edən olmadığından, proqram həmişəlik dayanar (deadlock).

Variant 2 düzgündür, çünki kanal bufferlidir və ölçüsü 1-dir, və göndərmə buffer dolu olmadıqda bloklanmır.

Variant 3 də düzgündür: göndərmə və qəbul balanslıdır.

Variant 4 düzgündür: bağlanmış kanaldan oxumaq mümkündür, oxuma sıfır dəyərini qaytarır və bloklanmır.

Variant 5 düzgündür: buffer 3, bir dəyər göndərilir, buffer dolmamışdır.

Xülasə, problem yalnız Variant 1-dədir — buffer olmayan kanala göndərmə zamanı bloklama.