登录
首页 >  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删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>