Golang, 以17个简短代码片段,切底弄懂 channel 基础

前端之家收集整理的这篇文章主要介绍了Golang, 以17个简短代码片段,切底弄懂 channel 基础前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

博客:http://www.cnblogs.com/linguanh/)

错误欢迎指出,只要你跟着敲完这17个例子,channel的基础绝对可以掌握!

函数并提供它们某种传值交流的机制。

分类:

done := make(chan ) done1 := make(chan ,) }

       

  

错误 deadlock,阻死 main 进程 done := make(chan done<- <-done println( }

  

错误 deadlock,阻死 main 进程 done := make(chan done<- println( }
错误 deadlock,阻死 main 进程 done := make(chan <-done 输出,前面没有输入语句,done 是 empty 的,所以一直等待输入 println( }
done := make(chan <-done println( 输出: }
done := make(chan println(输出哦) done<- 输出,见 test3 的结论 println(输出 <-done println( }
done := make(chan println(输出哦 done<- println(输出 <-done time.Sleep(time.Second * ) println( 输出: 输出哦 内容输出 }
done := make(chan done<- println(输出,除非 <-done 执行 <-done 输出完成之前,那么上面的语句将会走通 println( 输出: 输出,除非 <-done 执行 }
done := make(chan done<- println(输出,除非 <-done 执行 println( <-done 输出完成之后 输出: 输出,除非 <-done 执行 }
done := make(chan 关闭了的,不能再往里面输入值 */ <-done 关闭 channel 了,不会阻死 println( }
done := make(chan 关闭了的,不能再往里面输入值 */ <-done 关闭 channel 了,不会阻死 println( }
done := make(chan , done<- <- println( }
done := make(chan , <-done println( }
done := make(chan , done<- done<- println( }
done := make(chan , done<- println( }
输出来不及,因为main已经跑完了,所以延时一会,等待 go routine
done := make(chan , println(输出哦 done<- println(输出哦 <- println(输出不了了 time.Sleep(time.Second * ) 输出也有可以输出,routine 调度 println( 输出: 输出哦 输出哦 输出来不及, }
func getMessagesChannel(msg ,delay time.Duration) <-chan c := make(chan i := ; i <= ; i++ c <- fmt.Sprintf( time.Sleep(time.Millisecond * delay) c1 := getMessagesChannel(, c2 := getMessagesChannel(, c3 := getMessagesChannel(, 输出 c1 然后是 c2 最后是 c3 i := ; i <= ; i++ 提取一轮,共三轮 println(<-c1) println(<-c2) println(<-c3) 输出,因为 函数的延时 在 输入值之后,在第二轮及其之后 修改:如果把 getMessagesChannel 里面的延时,放在输入值之前,那么 c3 总是等待 5秒 后输出 }
修改的,复杂演示例,多channel 的选择,延时在输入之后的情况
修改的,复杂演示例子 c1 := getMessagesChannel(, c2 := getMessagesChannel(, c3 := getMessagesChannel(, 输出,而且,互不限制 i := ; i <= ; i++ msg := <- msg := <- msg := <- 输出,“第一”,“第二”,“第三”,都有,而且 随机顺序输出,因为协程的调度,第4,5,6次,由于“第二”只延时 500ms, 输出,然后是“第一”,此时“第三”还不能输出 输出5次,再过 500ms,"第三"的5秒还没走完,所以继续输出"第一", 输出。至此,"第一"和"第二"已经 输出,9-7 = 2,剩下两个是 "第三"。此时,距离首次的 5000ms 完成, 输出,再过5秒,最后一次"第三输出" }

猜你在找的Go相关文章