Junior — Middle
Čo sa stane v systéme, ak pri vytváraní kanála nezadáte jeho dĺžku?
sobes.tech AI
Odpoveď od AI
Ak pri vytváraní kanála v Go nie je uvedená jeho dĺžka, vytvorí sa nebufferovaný (unbuffered) kanál. Tento typ kanála má nasledujúce vlastnosti:
- Odoslanie (
chan <-) sa blokuje, kým iná gorutina ne prečíta hodnotu z kanála. - Prijatie (
<- chan) sa blokuje, kým nie je do kanála odoslaná hodnota.
To znamená, že operácie odoslania a prijatia sa priamo synchronizujú medzi gorutinami, zabezpečujúc prísnu synchronizáciu.
Príklad vytvorenia nebufferovaného kanála:
ch := make(chan int) // dĺžka nie je uvedená, nebufferovaný kanál
// Odoslanie a prijatie sa budú blokovať až do synchronizácie
Ak je potrebné asynchrónne odoslanie bez blokovania, je potrebné uviesť dĺžku bufferu, napríklad:
ch := make(chan int, 10) // buffer na 10 prvkov
Zhrnutie: Absencia dĺžky pri vytváraní kanála znamená, že kanál bude fungovať v synchronizovanom režime.