今天学习了信道相关的知识。信道长度为0说明只能一边取一边放不能暂放长度为n时说明一边可以暂存n个信息第n1个信息需要等待另一方取走才可继续放入。Val是value的缩写常用作变量名表示一个临时值或者参数值。Channel-val表示写val-channel表示读。package main import ( fmt sync time ) // 声明并初始化一个长度为0的信道 var moneyChan make(chan int) func pay(name string, money int, wait *sync.WaitGroup) { fmt.Printf(%s 开始购物\n, name) time.Sleep(1 * time.Second) fmt.Printf(%s 购物结束\n, name) //信道赋值语句 moneyChan - money wait.Done() } func main() { var wait sync.WaitGroup startTime : time.Now() wait.Add(3) go pay(瞪眼, 2, wait) go pay(小丸音, 3, wait) go pay(瞪眼小丸音, 5, wait) //避免死锁 go func() { defer close(moneyChan) wait.Wait() }() var moneyList []int for money : range moneyChan { moneyList append(moneyList, money) fmt.Println(money) } //从上面拿值也用 - // for { // money, ok : -moneyChan // fmt.Println(money, ok) // if !ok { // break // } // } fmt.Println(购买完成, time.Since(startTime)) fmt.Println(moneyList, moneyList) }以上记录纯属自身学习欢迎大家一起讨论一起进步