channel对传输值的影响
2020-03-01 本文已影响0人
快感炮神
package main
import (
"fmt"
"time"
)
// Counter 计数器类型
type Counter struct {
count int
}
// var mapChan = make(chan map[string]Counter, 1)
var mapChan = make(chan map[string]*Counter, 1)
func main() {
syncChan := make(chan struct{}, 2)
// 发送
go func() {
countMap := map[string]*Counter{
// "count": Counter{},
"count": &Counter{},
}
for i := 0; i < 5; i++ {
mapChan <- countMap
time.Sleep(time.Millisecond)
fmt.Println("the count map:%v count:%d. [sender]\n", countMap, countMap["count"].count)
}
close(mapChan)
syncChan <- struct{}{}
}()
// 接收
go func() {
for {
if elem, ok := <-mapChan; ok {
counter := elem["count"]
counter.count++
} else {
break
}
}
fmt.Println("stopped. [receiver]")
syncChan <- struct{}{}
}()
<-syncChan
<-syncChan
}