• 亚东
    2019-03-23
    strict{}{},作为赋值的时候,为什么有两个{}?

    作者回复: struct{}表示空结构,第二个表示实例化这个空结构

     1
     5
  • 张先森、
    2019-04-26
    为什么每次都是4 Canceled ,不应该是从这5个协程里面随机选一个吗?
     3
     4
  • 李孙科!
    2019-06-04
    每次都是4 Canceled 是不是说 cancel_1方法 结束的chan 是不是最后一个启动还在跑的协程
    
     1
  • Aiden
    2019-09-28
    老师您好,
    func cancel_1传给channel一个值,isCancelled取出一个值返回true容易理解,
    在func cancel_2中,函数close了channel后,为什么isCancelled函数依然返回true?
    我改写了该程序如下,<-cancelCh自己返回的bool值在close的情况下返回的就是false,这里应该怎么理解?
    func TestCancel(t *testing.T) {
        cancelChan := make(chan int, 0)
        for i := 0; i < 5; i++ {
            go func(i int, cancelCh chan int) {
                for {
                    if _, ok := <-cancelCh; !ok {//这里ok=false?
                        break
                    }
                    time.Sleep(time.Millisecond * 5)
                }
                fmt.Println(i, "Cancelled")
            }(i, cancelChan)
        }
        close(cancelChan)
        time.Sleep(time.Second * 1)
    }
    展开

    作者回复: func isCancelled(cancelChan chan struct{}) bool {
        select {
        case <-cancelChan:
            return true
        default:
            return false
        }
    }

    close(cancelChan)会使所有处于处于阻塞等待状态的,消息接收者(<-cancelChan)返回,所以上面的代码case <-cancelChan分支就会执行下去,返回true

    
    
  • weetime
    2019-09-13
    这些小例子希望老师能分享一下使用场景,一般情况很少有死循环执行一个任务,等待处理信号,我能想到的应用场景就是做心跳检测,主进程管理子进程,心跳探测异常,所有子进程停止工作。还有多路破解验证码,其他一路成功后,可以通知其他任务停止工作。多路爬虫,搜索,一旦有成功,取消其他任务
    
    
  • 虢國技醬
    2019-08-08
    看来老师的课程学会了一个技巧,用test来写一些验证、测试等等demo来运行,以前中是用一个个main包的形式,IDE各种提示main存在等等。而且这样慢慢的对写测试更加熟悉
    
    
  • 二师兄
    2019-04-28
    ```go
    func TestCancel(t *testing.T) {
        cancelCh := make(chan struct{}, 0)

        for i := 0; i < 3; i++ {
            go func(i int, cc chan struct{}) {
                for {
                    if isCancelled(cc) {
                        break
                    } else {
                        fmt.Println(i, "Not Yet")
                    }
                    time.Sleep(time.Millisecond * 5)
                }
                fmt.Println(i, "Canceled")
            }(i, cancelCh)
        }
        time.Sleep(time.Millisecond * 100) // ???? 如果加上这一行, 就看不到Canceled的输出
        cancel2(cancelCh)
    }
    ```

    如果我在cancel2调用之前, 增加一个sleep, 则只会输出“Not Yet”, 不会看到“Canceled”, 请问老师这是什么原因呢?
    展开

    作者回复: 应该没有问题的,看看你是不是把cancel后面的sleep删除了

     1
    
  • Jianfen
    2019-04-18
    func cancel_2(cancelChan chan struct{}){
        close(cancelChan)
    }
    这里,为什么都会收到?没弄明白。本节课也听的有点糊涂。

    作者回复: close有一种类似广播的效果,所有处于接收等待状态的接收者都会立即返回。你在仔细看一遍视频,并试试示例代码就清楚了。

    
    
  • 忽然之间
    2019-03-22
    追课进行时:)
    
    
我们在线,来聊聊吧