Sobes.tech
Senior

A következő kódrészletek közül melyik tartalmaz hibát vagy potenciális problémát a csatornákkal való munkában? Változat 1 package main func main() { ch := make(chan int) ch <- 1 } Változat 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Változat 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Változat 4 package main func main() { ch := make(chan int) close(ch) <-ch } Változat 5 package main func main() { ch := make(chan int, 3) ch <- 4 }

sobes.tech MI

Válasz az MI-től

Hiba az 1. változatban található:

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

Itt egy nem pufferelt csatorna jön létre ch := make(chan int). A csatornába való küldés ch <- 1 blokkol, amíg valaki nem olvas a csatornából. Ebben a kódban nincs fogadó, ezért a program örökre meg fog állni (deadlock).

A 2. változat helyes, mert a csatorna pufferelt, mérete 1, és a küldés nem blokkol, ha a puffer nincs tele.

A 3. változat szintén helyes: a küldés és fogadás kiegyensúlyozott.

A 4. változat helyes: lezárt csatornából lehet olvasni, az olvasás null értéket ad vissza, és nem blokkol.

Az 5. változat helyes: 3-as puffer, egy érték kerül küldésre, a puffer nem tele.

Összefoglalva, a probléma csak az 1. változatban van — blokkolás nem pufferelt csatornára küldéskor, ha nincs fogadó.