亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【九月打卡】第9天 go語言channel

標簽:
Go

课程名称GO开发工程师

课程章节:6-1:channel

课程讲师ccmouse

课程内容

创建channel:

func chanDemoDeadlock() {
	//var c chan int 声明一个channel
	c := make(chan int) // 创建一个channel
	c <- 1              // 往channel里写数据
	c <- 2
	n := <-c       // 从channel里读数据
	fmt.Println(n) // fatal error: all goroutines are asleep - deadlock!

	//	deadlock的原因:往channel里写数据时没人接收
}

通过协程接收channel里的数据

func chanDemoGoRoutine() {
	//var c chan int 声明一个channel
	c := make(chan int) // 创建一个channel
	go func() {         // 创建协程去接收channel里数据
		for { // 持续接收
			n := <-c
			fmt.Println(n)
		}

	}()
	c <- 1 // 往channel里写数据
	c <- 2

	//	运行结果有可能只打印了1
	//	原因:往channel里发2后主程序就结束了,协程还来不及打印
}

打印顺序:

func worker(i int, c chan int) {
	for {
		// printf 是io操作,输出的顺序不确定(会被调度器调度)
		fmt.Printf("i: %d---> n: %c\n", i, <-c)
	}
	//i: 4---> n: e
	//i: 5---> n: f
	//i: 8---> n: i
	//i: 6---> n: g
	//i: 7---> n: h
	//i: 1---> n: b
	//i: 9---> n: j
	//i: 0---> n: a
	//i: 2---> n: c
}
func chanDemoWorker() {
	var channels [10]chan int
	for i := 0; i < len(channels); i++ {
		go worker(i, channels[i]) // 将匿名函数提取为子函数
	}
	for i := 0; i < 10; i++ {
		channels[i] <- 'a' + i
	}
	for i := 0; i < 10; i++ {
		channels[i] <- 'A' + i
	}
	time.Sleep(time.Minute) // 延迟主程序main退出
}

提取工作子函数:

func createWorker(i int) chan int {
	c := make(chan int)
	go func() {
		for {
			fmt.Printf("i: %d---> n: %c\n", i, <-c)
		}
	}()
	return c
}
func chanDemoCreateWorker() {
	var channels [10]chan int
	for i := 0; i < len(channels); i++ {
		channels[i] = createWorker(i) // 将匿名函数提取为子函数
	}
	for i := 0; i < 10; i++ {
		channels[i] <- 'a' + i
	}
	for i := 0; i < 10; i++ {
		channels[i] <- 'A' + i
	}
	time.Sleep(time.Minute) // 延迟主程序main退出
}

课程收获

  1. 注意channel 类型的写法 chan int

图片描述
图片描述

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消