- 博客(6)
- 收藏
- 关注
原创 Go并发模式之 错误处理
不好的处理错误方式,或者说 没有进行错误处理的例子:func main() { checkStatus := func(done <-chan interface{}, urls ...string) <-chan *http.Response{ responses := make(chan *http.Response) go func() { defer ...
2019-03-26 22:58:02 896
原创 Go并发模式之 防止goroutine泄漏
goroutine 有以下几种方式被终止:1。 当他完成了它的工作。2。 因为不可恢复的错误, 它不能继续工作3。 当他被告知 需要终止工作。我们可以简单的使用前两种方法, 因为这两种方法隐含在你的算法中, 但"取消工作" 又是怎样工作的呢?例如:这样情况: 子goroutine 是否该继续执行可能是以许多其他goroutine 状态的认知为基础的。通常是 main gorou...
2019-03-17 23:22:58 1602
原创 Go并发模式之 for-select
for - selectfor{ //要不就无限循环,要不就使用range 语句循环 select{ //使用channel进行作业 }}以下情况使用 for-select向channel 发送迭代变量 ---for selectfor _, s := range []string{"a", "b", "c"}{ select { ...
2019-03-17 18:14:39 8236
原创 Go并发模式之 约束
约束:在编写并发代码的时候,有以下几种不同的保证操作安全的方法。1。 用于共享内存的同步原语(如sync.Mutex)2. 通过通信来 共享内存来进行同步(如 channel)在并发处理中还有其他几种情况也是隐式并发安全的:3。 不会发生改变的数据4。 受到保护的数据约束:特定约束,和 词法约束特定约束:是通过公约实现约束的。 无论是由语言社区, 你所在的团队, 还是你的代码...
2019-03-17 17:58:20 162
原创 Go并发原语/并发组件/go并发核心语法 之select
select 语句是 将各种channel 绑定在一起的粘合剂; 连接各种组件在一起;select 语句可以帮助安全地将channel 与诸如取消,超时,等待和默认值之类 的概念结合在一起。与 switch 块不同, select 块中的case 语句没有测试顺序,如果没有满足任何条件,执行也不会失败。如果所有channel 都没有准备好,则阻塞状态直到 。当一个channel准备好了,...
2019-03-16 23:31:22 242 1
原创 Go并发原语/并发组件/go并发核心语法 之channel
channel:虽然 他们可以用来同步内存访问; 但他们最好用于在 goroutine 之间传递信息。命名: 像河流一样,一个channel充当着信息传送的管道,值可以沿着channel传递,然后在下游读出。由于这个特点,通常使用"stream" 来做 chan 变量名的后缀。创建channel 语句:var dataStream chan interface{}...
2019-03-16 23:14:54 18910 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人