GO语言实现的简单的字母和数字交替输出

wcz3043 · · 325 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
``` package main import ( "fmt" "sync" ) var zf []string = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"} func PrintZF(zfc chan int, nc chan int, wg *sync.WaitGroup) { defer wg.Done() for i := 0; i < 26; i++ { select { case <-zfc: fmt.Println(zf[i]) nc <- 1 } } } func PrintN(zfc chan int, nc chan int, wg *sync.WaitGroup) { defer wg.Done() for i := 0; i < 26; i++ { select { case <-nc: fmt.Println(i) zfc <- 1 } } } func main() { wg := &sync.WaitGroup{} // 1 防止: 两个协程,其中一个结束,另一个仍向通道中写入数据,导致死锁 zfc := make(chan int, 1) nc := make(chan int, 1) wg.Add(1) go PrintZF(zfc, nc, wg) wg.Add(1) go PrintN(zfc, nc, wg) zfc <- 1 wg.Wait() close(zfc) close(nc) } ```
325 次点击  
加入收藏 微博
1 回复  |  直到 2018-06-13 16:50:15
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传