嵌套开关在golang中合法吗?

时间:2018-07-09 11:35:30

标签: go switch-statement

我希望golang语法可以耐时间(这意味着如果我现在编写代码,则该语法仍然有效10年)

            switch strings.ToLower(firstCommand) {
            default:
                    fmt.Println("Default 1st Nest")

            case "c":
                    fmt.Println("C CREATE")
                    fallthrough
            case "u":
                    fmt.Println("U UPDATE")
                    fallthrough
            case "d":
                    fmt.Println("D DELETE")
                    dosomething()

                    switch strings.ToLower(secondCommand) {
                    default:
                    fmt.Println("Default 2nd Nest")

                    case "a":
                    donothing()

                    }
           }

上面的代码语法合法吗?我的意思是,它经得起时间的考验吗?否则,有什么更好的写法呢?

1 个答案:

答案 0 :(得分:2)

阅读Go编程语言规范,Go 1兼容性保证和Go 2计划。


  

The Go Programming Language Specification

     

Blocks

     

“ switch”或“ select”语句中的每个子句都充当隐式   

     

Switch statements

     

“ Switch”语句提供多路执行。表达式或类型   将说明符与“开关”内的“案例”进行比较以确定   要执行哪个分支。


  

Go 1 and the Future of Go Programs

     

打算按照Go 1规范编写的程序将   继续在   该规范。在某些时候,Go 2规范可能会   出现,但是直到那个时候,今天可以运行的Go程序应该   即使Go 1的将来的“点”版本出现了,仍继续工作(Go   1.1,转到1.2等)。


  

The Go Blog: Toward Go 2

     

这是我今天在Gophercon 2017上的[Russ Cox]演讲的文本,询问   在讨论和计划Go 2时获得整个Go社区的帮助。

     

最后,我们将如何运送和交付Go 2?

     

我认为最好的计划是运送向后兼容的零件   Go 1发行版中按功能逐个递增的版本   顺序。

     

完成所有向后兼容的工作(例如在Go 1.20中说),然后   我们可以在Go 2.0中进行向后不兼容的更改。

     

所有这些都是推测性的,我只列出了具体的发行版号   提到的是球场估计的占位符,但我想   清楚我们并没有放弃Go 1,实际上我们将带来   尽可能地前进1。


编译并测试概念验证程序。例如,

package main

import (
    "fmt"
    "strings"
)

func dosomething() {}

func donothing() {}

func main() {
    var firstCommand, secondCommand string
    switch strings.ToLower(firstCommand) {
    default:
        fmt.Println("Default 1st Nest")
    case "c":
        fmt.Println("C CREATE")
        fallthrough
    case "u":
        fmt.Println("U UPDATE")
        fallthrough
    case "d":
        fmt.Println("D DELETE")
        dosomething()

        switch strings.ToLower(secondCommand) {
        default:
            fmt.Println("Default 2nd Nest")
        case "a":
            donothing()
        }
    }
}

游乐场:https://play.golang.org/p/Q1ZdYqeNk67

输出:

Default 1st Nest

现在,您有一个权威的答案。