Sobes.tech
Junior — Middle

Kas on lubatud saata sõnumeid ühele kanalile samaaegselt mitme goroutine'iga?

sobes.tech AI

Vastus AI-lt

Jah, Go-s on lubatud samaaegselt mitmest gorutiinist saata sõnumeid ühte kanalisse. Kanalid Go-s on niiditurvalised ja tagavad sünkroniseerimise gorutiinide vahel.

Kuid on oluline meeles pidada:

  • Kui mitu gorutaini kirjutavad ühte kanalisse ja keegi seda ei loe, põhjustab see blokeeringu.
  • Kui kanal on pufferdatud, blokeerivad kirjutamised ainult siis, kui puffer on täis.
  • Kanalit tuleb hoolikalt sulgeda: seda peaks tegema ainult saatja ja ainult siis, kui on kindel, et rohkem kirjeid ei tule.

Näide:

ch := make(chan int)

// Mitme gorutini käivitamine, mis saadavad andmeid kanalile
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// Kanali lugemine
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

Seega on samaaegne saatmine kanalile mitmest gorutiinist Go-s standardpraktika.