Middle+
Чӣ тавр канал дар Go аст? Барои чӣ каналҳо истифода мешаванд?
sobes.tech AI
Ҷавоб аз AI
Дар Go, канал (channel) — механизм барои интиқол додани маълумот байни goroutine-ҳо (сӯрохиҳои сабук). Каналҳо таъмин мекунанд, ки муоширати бехатартар ва ҳамоҳангшуда, ки ба goroutine-ҳо имкон медиҳад, ки арзишҳоро бидуни истифодаи тағйирёбандаҳои умумӣ ва бастаниҳо мубодила кунанд.
Каналҳо бо нишон додани навъи маълумоти интиқолёфта эълон мешаванд, масалан:
ch := make(chan int) // канал барои интиқоли ададҳои пурра
Оператсияҳои асосӣ бо каналҳо:
- Иҷрои арзиш:
ch <- value - Гирифтани арзиш:
value := <-ch
Каналҳо барои:
- ҳамоҳангсозии goroutine-ҳо
- интиқоли маълумот байни goroutine-ҳо
- ташкил кардани пайплайни коркарди маълумот
Масалан:
package main
import (
"fmt"
"time"
)
func worker(ch chan int) {
for val := range ch {
fmt.Println("Гирифт:", val)
}
}
func main() {
ch := make(chan int)
go worker(ch)
for i := 0; i < 5; i++ {
ch <- i
}
close(ch) // каналиро мебандем, то ки worker ба охир расад
time.Sleep(time.Second)
}
Дар ин мисол, канал барои интиқоли рақамҳо аз goroutine-и асосӣ ба worker истифода мешавад, ки онҳоро чоп мекунад.