channel调用

来源:11-1 channel

慕前端4885459

2019-11-13

为什么不会在w<-3的时候就调用doWorker,而是会在w<-4后才调用呢

package main

import (
	"fmt"
	"time"
)

func doWorker(c chan int) {
	fmt.Println(len(c))
	n := <-c
	fmt.Println(n)
	n = <-c
	fmt.Println(n)

}

func createChannel() chan int{
	c := make(chan int)
	go doWorker(c)
	return c
}

func main() {
	w := createChannel()
	w<-3
	w<-4
	//w2<-4
	time.Sleep(time.Millisecond)
	fmt.Println(w)
}

写回答

1回答

ccmouse

2019-11-14

它在运行go doWorker(c)的时候就调用了。doWorker已经在工作了。

w<-3的时候就会切换到doWorker这个goroutine去收3

你是怎么得出“会在w<-4后才调用”的呢?

0
1
慕前端4885459
明白了老师,这个goruntine会阻塞在接收w的地方
2019-11-15
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程