Sobes.tech
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.