Sobes.tech
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 истифода мешавад, ки онҳоро чоп мекунад.