Go - Python中"pass"的等效语句是什么?

21

我有一个select语句中的默认情况,我想什么都不做,只是继续执行,但是如果留空该行,则语句中的任何事情都不会发生。

        select {
        case quit_status := <-quit:
            if quit_status == true {
                fmt.Printf("********************* GOROUTINE [%d] Received QUIT MSG\n", id)
                return
            }
        default:
            fmt.Printf("GOROUTINE [%d] step: %d, NO QUIT MSG\n", id, i)
        }

你试过完全删除默认语句吗? - Joel Cornett
你能不能完全省略 default 语句? - verdesmarald
2个回答

10
select 语句中的 default 分支旨在实现通道读写的非阻塞 I/O。当所有 case 中的通道都没有准备好进行读写时,default 分支内的代码将被执行。
因此,在你的情况下,如果 quit 通道没有内容可以读取,则会执行 default 块。你可以简单地删除 default case,这样它将在 quit_status := <-quit case 上阻塞,直到 quit 中有值可用... 这可能是你想要的结果。
如果希望在 select 语句之后立即继续执行代码,应该在单独的 goroutine 中运行此 select 语句。
go func() {
    select {
    case quit_status := <-quit:
        ...

    }
}()

// Execution continues here immediately.

5
没有必要在另一个 goroutine 中运行它。你可以只需放置 default:,然后在下一行关闭 select 语句即可。"pass" 的 Go 版本就是什么都不放。 - Stephen Weinberg

3
正如 @StephenWeinberg 指出的那样,Go 语言中没有 pass 语句。当通道接收到某些东西时,只需在 case 中不写任何内容即可。
select {
    case <-ch:
        // do something
    case <-time.After(2*time.Second):
        // timeout
    default:
        // do nothing aka pass
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接