Golang之消息机制channel
1. 背景: 1. 对于以下这段代码: 按照想法应该输出 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 但是,输出结果是: 0 1 2 3 4 5 6 7 8 9 2. 原因: 在goroutine还未来得及跑loop函数时,主函数main已经退出。 解决主函数退出太快最直接的方法是让主函数睡眠一段时间: 这次输出结果确实是两趟。 可是等待的办法并不好,因为并不知goroutine要执行多长时间,只能尽可能长的设置主函数的sleep,这样会让主函数执行时间远大于实际执行时间。 3. 需要找一个方法,让goroutine快执行完时通知主函数,即阻塞住主routine,类似Java中的A.join()函数(调用方必须等待A执行完毕返回后再返回),那么涉及多个goroutine间通信,go中的channel就起了这样的作用。 2. channel 1.定义: channel是Golang语言在语言层级提供的goroutine间的通信方式,可以使用channel在多个goroutine之间传递消息。 2.使用: channel是类型相关的,一个channel只能传递一种类型的值,传递类型需要在声明channel时指定。 3.声明: 1. var chanName chan ElementType 举例:声明一个传递int类型的channel:var ch