Junior — Middle
Mi történik a rendszerben, ha nem adja meg a csatorna hosszát a létrehozás során?
sobes.tech MI
Válasz az MI-től
Ha a Go-ban csatornát hoz létre, és nem adja meg a hosszát, akkor egy nem pufferelt (unbuffered) csatorna jön létre. Ennek a típusnak a jellemzői:
- A küldés (
chan <-) blokkolódik, amíg egy másik goroutine nem olvassa ki az értéket a csatornából. - A fogadás (
<- chan) blokkolódik, amíg egy érték nem kerül küldésre a csatornába.
Ez azt jelenti, hogy a küldési és fogadási műveletek közvetlenül szinkronizálódnak a goroutine-ok között, szigorú szinkronizációt biztosítva.
Példa nem pufferelt csatorna létrehozására:
ch := make(chan int) // hossz nem megadva, nem pufferelt csatorna
// A küldés és fogadás blokkolni fog a szinkronizációig
Ha aszinkron küldésre van szükség blokkolás nélkül, meg kell adni a buffer hosszát, például:
ch := make(chan int, 10) // 10 elemű buffer
Összefoglalva, a csatorna létrehozásakor nem megadott hossz azt jelenti, hogy a csatorna szinkron módban fog működni.