Channel Directions: Type-Safe Communication
Kanal yo'nalishlari: tur-xavfsiz muloqot
Channel Pipelines darsida siz allaqachon <-chan int ko'rgansiz. Funksiya parametrlarida kanalning yo'nalishini cheklash mumkin — bu Go'ning kompilyatorga "bu funksiya faqat yuboradi" yoki "faqat qabul qiladi" deb aytish usuli:
func producer(ch chan<- int) { ... } // faqat yuborish mumkin
func consumer(ch <-chan int) { ... } // faqat qabul qilish mumkinBu — 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, 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.
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
Buffered Channels: Decoupling Producers and Consumers
$ go run main.go
Kodingizni ishga tushiring