猿问

如何在 go 中复制 do?

我希望执行一组代码,直到用户明确想要退出该函数。例如:当用户运行程序时,他会看到 2 个选项:


再次运行

出口

这将使用 switch case 结构来实现。这里如果用户按下 1,与 1 相关联的一组功能将执行,如果用户按下 2,程序将退出。我应该如何在 golang 中实现这个场景?在 java 中,我相信这可以使用 do while 结构来完成,但 go 不支持 do while 循环。以下是我尝试过的代码,但这是一个无限循环:


func sample() {

    var i = 1

    for i > 0 {

        fmt.Println("Press 1 to run")

        fmt.Println("Press 2 to exit")

        var input string

        inpt, _ := fmt.Scanln(&input)

        switch inpt {

        case 1:

            fmt.Println("hi")

        case 2:

            os.Exit(2)

        default:

            fmt.Println("def")

        }

    }

}

无论输入如何,程序都只打印“hi”。有人可以纠正我在这里做错了什么吗?


谢谢。


汪汪一只猫
浏览 159回答 3
3回答

aluckdog

Ado..while可以更直接地在 Go 中使用 for 循环进行模拟,该循环使用以 为bool种子的循环变量true。for ok := true; ok; ok = EXPR { }或多或少直接等价于do { } while(EXPR)所以在你的情况下:var input intfor ok := true; ok; ok = (input != 2) {&nbsp; &nbsp; n, err := fmt.Scanln(&input)&nbsp; &nbsp; if n < 1 || err != nil {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("invalid input")&nbsp; &nbsp; &nbsp; &nbsp; break&nbsp; &nbsp; }&nbsp; &nbsp; switch input {&nbsp; &nbsp; case 1:&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("hi")&nbsp; &nbsp; case 2:&nbsp; &nbsp; &nbsp; &nbsp; // Do nothing (we want to exit the loop)&nbsp; &nbsp; &nbsp; &nbsp; // In a real program this could be cleanup&nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("def")&nbsp; &nbsp; }}编辑:游乐场(带有虚拟的标准输入)虽然,不可否认,在这种情况下,它可能是更清晰的整体,只是显式调用(标记)break,return或os.Exit在循环。

月关宝盒

当提出这个问题时,这是针对这种特定情况的更好答案(我几乎不知道在 Google 搜索“do while loop golang”时这会是排名第一的结果)。将您的函数包装在 for 循环中:package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "os")func main() {&nbsp; &nbsp; fmt.Println("Press 1 to run")&nbsp; &nbsp; fmt.Println("Press 2 to exit")&nbsp; &nbsp; for {&nbsp; &nbsp; &nbsp; &nbsp; sample()&nbsp; &nbsp; }}func sample() {&nbsp; &nbsp; var input int&nbsp; &nbsp; n, err := fmt.Scanln(&input)&nbsp; &nbsp; if n < 1 || err != nil {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fmt.Println("invalid input")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return&nbsp; &nbsp; }&nbsp; &nbsp; switch input {&nbsp; &nbsp; case 1:&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("hi")&nbsp; &nbsp; case 2:&nbsp; &nbsp; &nbsp; &nbsp; os.Exit(2)&nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("def")&nbsp; &nbsp; }}甲for没有任何声明循环相当于while在其他类似C语言的循环。查看涵盖循环的Effective Go 文档for。

呼如林

do...while in go 可以是这样的:func main() {&nbsp; &nbsp; var value int&nbsp; &nbsp; for {&nbsp; &nbsp; &nbsp; &nbsp; value++&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(value)&nbsp; &nbsp; &nbsp; &nbsp; if value%6 != 0 {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Go
我要回答