一尘不染

在旅途中如何复制?

go

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

  1. 再次运行
  2. 出口

这将通过使用开关盒结构来实现。如果用户按下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”。有人可以纠正我在这里做什么错吗?

谢谢。


阅读 203

收藏
2020-07-02

共1个答案

一尘不染

当问到这个问题时,这是 针对特定情况 的更好答案(我几乎不知道这是在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

2020-07-02