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