带有简短语句的 while 循环

While loop with a short statement

我是 Go 的新手,我已经有过几次想要使用带有简短语句的 while 循环之类的东西(请参见下面的示例)。这样的事情可能吗?我很确定一定有一些简单的方法可以做到这一点,但我无法在互联网上找到任何东西。

示例:
(注意:我知道 Go 不支持这些示例中的语法,我只是使用与 if with a short statement 中相同的语法来说明我的问题)

// pop from queue until it returns nil
for val := queue.Pop(); val != nil {

}
// scan numbers until EOF (enough to check if err is nil for competitive programming)
var n int
for _, err := fmt.Scan(&n); err != nil {

}

没有完全按照您的意愿行事的语法,但有一些选项可以相对简洁地表达您的意图。

要么将声明移到 for 循环中:

for {
    val := queue.Pop()
    if val == nil { break }
    ...
}

或者您复制表达式:

for val := queue.Pop(); val != nil; val = queue.Pop() {
    ...
}

或者你以不同的方式表达循环条件(我猜 queue 在这里,使用 len 可能不是确定队列是否为空的正确方法,具体取决于你的队列类型是什么)。

for len(queue) > 0 {
   val := queue.Pop()
   ...
}