GoDasturchi
Channel Directions: Send-Only and Receive-Only

Channel Directions: Send-Only and Receive-Only

Kanal yo'nalishlari: faqat-yuborish va faqat-qabul qilish

Funksiya parametrlarida kanalning yo'nalishini cheklash mumkin — bu Go'ning kompilyatorga "bu funksiya faqat yuboradi" yoki "faqat qabul qiladi" deb aytish usuli:

example.go
func producer(ch chan<- int) { ... }  // faqat yuborish mumkin
func consumer(ch <-chan int) { ... }  // faqat qabul qilish mumkin

Bu — Pointers & Memory kursidagi "funksiya imzosi orqali niyatni bildirish" g'oyasining davomi: xuddi *int parametr "bu funksiya qiymatni o'zgartirishi mumkin" deganidek, chan<- int "bu funksiya faqat yuboradi, hech qachon qabul qilmaydi" deydi. Agar kimdir yo'nalishga zid amal qilishga urinsa (masalan, faqat-yuborish kanalidan qabul qilishga), bu kompilyatsiya vaqtidagi xato bo'ladi — ishga tushirilgandan keyin emas.

>_ Exercise

producer(ch chan<- int, nums []int) funksiyasini yozing — u nums ustidan aylanib, har bir sonning kvadratini chga yuboradi, so'ngra kanalni yopadi. consumer(ch <-chan int) []int funksiyasini yozing — u kanal ustidan range qilib, barcha qiymatlarni yig'ib qaytaradi. mainda ikkalasini ulab ishlatib ko'ring (producer goroutinada, consumer to'g'ridan-to'g'ri chaqiriladi).

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Kanal yo'nalishini parametr turida ko'rsatish (chan<- yoki <-chan) funksiyaning niyatini kompilyator tekshiradigan hujjatga aylantiradi: yo'nalishga zid foydalanish ishga tushirishdan oldin, kompilyatsiya bosqichidayoq aniqlanadi.

NEXT UP

Select: Waiting on Multiple Channels

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Channel Directions: Send-Only and Receive-Only

Kanal yo'nalishlari: faqat-yuborish va faqat-qabul qilish

Funksiya parametrlarida kanalning yo'nalishini cheklash mumkin — bu Go'ning kompilyatorga "bu funksiya faqat yuboradi" yoki "faqat qabul qiladi" deb aytish usuli:

example.go
func producer(ch chan<- int) { ... }  // faqat yuborish mumkin
func consumer(ch <-chan int) { ... }  // faqat qabul qilish mumkin

Bu — Pointers & Memory kursidagi "funksiya imzosi orqali niyatni bildirish" g'oyasining davomi: xuddi *int parametr "bu funksiya qiymatni o'zgartirishi mumkin" deganidek, chan<- int "bu funksiya faqat yuboradi, hech qachon qabul qilmaydi" deydi. Agar kimdir yo'nalishga zid amal qilishga urinsa (masalan, faqat-yuborish kanalidan qabul qilishga), bu kompilyatsiya vaqtidagi xato bo'ladi — ishga tushirilgandan keyin emas.

>_ Exercise

producer(ch chan<- int, nums []int) funksiyasini yozing — u nums ustidan aylanib, har bir sonning kvadratini chga yuboradi, so'ngra kanalni yopadi. consumer(ch <-chan int) []int funksiyasini yozing — u kanal ustidan range qilib, barcha qiymatlarni yig'ib qaytaradi. mainda ikkalasini ulab ishlatib ko'ring (producer goroutinada, consumer to'g'ridan-to'g'ri chaqiriladi).

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Kanal yo'nalishini parametr turida ko'rsatish (chan<- yoki <-chan) funksiyaning niyatini kompilyator tekshiradigan hujjatga aylantiradi: yo'nalishga zid foydalanish ishga tushirishdan oldin, kompilyatsiya bosqichidayoq aniqlanadi.

NEXT UP

Select: Waiting on Multiple Channels