为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 go 中复制 do?

如何在 go 中复制 do?

Go
汪汪一只猫 2021-11-08 19:01:25
我希望执行一组代码,直到用户明确想要退出该函数。例如:当用户运行程序时,他会看到 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”。有人可以纠正我在这里做错了什么吗?谢谢。
查看完整描述

3 回答

?
aluckdog

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在循环。


查看完整回答
反对 回复 2021-11-08
?
月关宝盒

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。


查看完整回答
反对 回复 2021-11-08
?
呼如林

TA贡献1798条经验 获得超3个赞

do...while in go 可以是这样的:


func main() {

    var value int

    for {

        value++

        fmt.Println(value)

        if value%6 != 0 {

            break

        }

    }

}


查看完整回答
反对 回复 2021-11-08
  • 3 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信