登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  Golang >  Go问答

在无限循环中switch case中的break语句失效

来源:stackoverflow

时间:2024-03-18 09:09:31 176浏览 收藏

**文章首段摘要:** 在无限循环中使用 `switch case` 语句时,`break` 语句可能无法正常结束循环。这是因为 `break` 语句只能结束它所在的 `switch case` 分支,而无法跳出整个循环。要正确地跳出无限循环,需要使用循环标签,然后在 `switch case` 中的 `default` 分支中使用 `break` 语句,加上标签名称,例如 `break Loop`。这样,当 `default` 分支被执行时,`break` 语句将跳出带有标签的循环,而不是仅仅跳出 `switch case` 分支。

问题内容

在下面的代码中,我无法理解为什么 default 中的 break 语句不足以结束无限循环。演示链接

package main

import "fmt"

func main() {
    for { //infinite loop
        fmt.print("enter choice")
        userchoice := 3 //intenssionaly given value here for testing
        switch userchoice {
        case 1:
            fmt.println("enter radios of circle:")
        case 2:
            fmt.println("enter radios of circle:")
        default:
            fmt.println("\nexiting...")
            break  // this break is executing , but why it is not coming out of infinte 'for' loop ?
        }

    }
}

上述代码的输出(未结束..继续)

Enter Choice
Exiting...
Enter Choice
Exiting...
Enter Choice
Exiting...
Enter Choice
Exiting...
Enter Choice
Exiting...
Enter Choice
Exiting...
Enter Choice
Exiting...
Enter Choice
Exiting...

解决方案


如果向循环添加标签,则可以在循环中显式使用 break:

package main

import "fmt"

func main() {
    Loop:
        for { //infinite loop
            fmt.Print("Enter Choice")
            userChoice := 3 //Intenssionaly given value here for testing
            switch userChoice {
            case 1:
                fmt.Println("Enter Radios of Circle:")
            case 2:
                fmt.Println("Enter Radios of Circle:")
            default:
                fmt.Println("\nExiting...")
                break Loop
            }

        }
    fmt.Println("Outside the loop!")
}

这是 a working example

今天关于《在无限循环中switch case中的break语句失效》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>