Sobes.tech
Junior — Middle

Vai ir atļauts vienā kanālā vienlaikus sūtīt ziņas ar vairākām gorutīnām?

sobes.tech AI

Atbilde no AI

Jā, Go ir atļauts vienlaikus sūtīt ziņas uz kanāla no vairākām gorutīnām. Kanāli Go ir droši pret pavedieniem un nodrošina sinhronizāciju starp gorutīnām.

Tomēr ir svarīgi atcerēties:

  • Ja vairākas gorutīnas raksta vienā kanālā un neviens to nelasa, tas novedīs pie bloķēšanas.
  • Ja kanāls ir buferēts, ieraksti tiks bloķēti tikai tad, kad buferis būs pilns.
  • Ir jābūt uzmanīgiem ar kanāla slēgšanu: to drīkst slēgt tikai sūtītājs, un tikai tad, kad ir pārliecināts, ka vairs nebūs ierakstu.

Piemērs:

ch := make(chan int)

// Dažu gorutīnu palaišana, kas sūta datus uz kanāla
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// Lasīšana no kanāla
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

Tādējādi, vienlaicīga sūtīšana uz kanāla no vairākām gorutīnām ir standarta prakse Go valodā.