Day16# Channel

今天要介绍的是 channel,那麽我们就进入正题吧 ─=≡Σ(((っ゚∀゚)っ

channel

昨天在介绍 goroutine 有提到,当 main goroutine 结束时,其他的 goroutine 也会跟着结束,要怎麽让 main goroutine 知道其他 goroutine 的状况,就能够透过 channel 来进行不同 goroutine 之间的交流以及资讯传递。

  • channel 是一种资料型态
  • channel 是一条通道,可以接收资讯也可以传送资讯
  • channel 可以确保在各个 goroutine 间,在完成资料收送後的动作後才会继续往下处理,这样可以在 goroutine 间同步的进行资料处理

如何宣告

var ch chan int

// 或是

ch := make(chan int)

如何取出或塞入资料

channel 具有方向性,因此使用 <- 时需要特别注意箭头方向。

ch <- v // 把 v 的值塞入 channel

v <- ch // 从 ch 把东西取出,并塞入 v

Buffered Channel

可以限制定义的 Channel 内的参数数量:

// variable := make(chan Type, Number)

package main

import "fmt"

func main() {
	ch := make(chan int, 2)
	ch <- 1
	ch <- 2
	fmt.Println(<-ch)
	fmt.Println(<-ch)
}

close

当没有任何值可以被传进 channel 时,可以透过 close 来关闭 channel。

close(ch)

结尾

channel 基本语法的介绍就到这边结束
如果有任何问题欢迎与我告知 :)


<<:  [Day 16] 实作-图片轮播 Carousels

>>:  30天学会C语言: Day 15-奇怪的资料型态

[Android Studio 30天自我挑战] Timer计时器练习

今天利用Timer来完成计时器的APP练习 Timer是一个普通的类,其中有几个重要的方法; 而Ti...

Day-21 Excel位址精选题目练习

经过了一晚的思考,我认为昨天讲的还不够清楚,因此今天我找了三题相关题目,今天来为大家做更深入的讲解,...

Day 25: 那我们来用cypress call api吧

在前面的单元测试部分与前一天的Cypress我们都讲到使用假资料来,我们不一定随时都是使用mock一...

Progressive Web App 启动和更新机制 (6)

PWA 启动 要怎麽知道 Web App 是在 PWA 已经被安装情况下被开启的,靠 CSS 中有个...

Day.1 「工欲善其事,必先利其器!」—— 前言 与 介绍工具

Photo by Adi Goldstein on Unsplash 大家好 我是毛毛,因为这波疫...