3 回答
TA贡献1847条经验 获得超7个赞
Ado..while可以更直接地在 Go 中使用 for 循环进行模拟,该循环使用以 为bool种子的循环变量true。
for ok := true; ok; ok = EXPR { }
或多或少直接等价于
do { } while(EXPR)
所以在你的情况下:
var input int
for ok := true; ok; ok = (input != 2) {
n, err := fmt.Scanln(&input)
if n < 1 || err != nil {
fmt.Println("invalid input")
break
}
switch input {
case 1:
fmt.Println("hi")
case 2:
// Do nothing (we want to exit the loop)
// In a real program this could be cleanup
default:
fmt.Println("def")
}
}
编辑:游乐场(带有虚拟的标准输入)
虽然,不可否认,在这种情况下,它可能是更清晰的整体,只是显式调用(标记)break,return或os.Exit在循环。
TA贡献1772条经验 获得超5个赞
当提出这个问题时,这是针对这种特定情况的更好答案(我几乎不知道在 Google 搜索“do while loop golang”时这会是排名第一的结果)。
将您的函数包装在 for 循环中:
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("Press 1 to run")
fmt.Println("Press 2 to exit")
for {
sample()
}
}
func sample() {
var input int
n, err := fmt.Scanln(&input)
if n < 1 || err != nil {
fmt.Println("invalid input")
return
}
switch input {
case 1:
fmt.Println("hi")
case 2:
os.Exit(2)
default:
fmt.Println("def")
}
}
甲for没有任何声明循环相当于while在其他类似C语言的循环。查看涵盖循环的Effective Go 文档for。
TA贡献1798条经验 获得超3个赞
do...while in go 可以是这样的:
func main() {
var value int
for {
value++
fmt.Println(value)
if value%6 != 0 {
break
}
}
}
- 3 回答
- 0 关注
- 158 浏览
添加回答
举报