Golang开关语句

Golang开关语句,go,switch-statement,Go,Switch Statement,我是刚到golang的,从python转到了golang。如何转换“switch”中的if-else语句 然后我初始化这个结构,如下所示: a:= Client{"v1"} if a.Type == "v1" { if err := apiClient.v1("I am version one"); err != nil { log.Printf(" Error: Sending type v1") return err } } else if

我是刚到golang的,从python转到了golang。如何转换“switch”中的if-else语句

然后我初始化这个结构,如下所示:

a:= Client{"v1"}

if a.Type == "v1" {
    if err := apiClient.v1("I am version one"); err != nil {
        log.Printf(" Error: Sending type v1")
        return err
    }
} else if a.Type == "v2" {
    if err := apiClient.v2("I am version 2"); err != nil {
        log.Printf(" Error: Sending type v2\n")
        return err
    }
}  else {
        return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
    }

尽管你可以通过阅读下面的文章自己弄明白,但你还是应该写:

switch a.Type {
case "v1":
    // ...
    // no need to 'break' in go
case "v2":
    // ...
default:
    // usual 'else' clause statements
}

这和任何其他编程语言一样,只是语法有点变化

您可以按如下方式使用开关箱:

switch a.Type {
case "v1":
    if err := apiClient.v1("I am version one"); err != nil {
        log.Printf(" Error: Sending type v1")
        return err
    }
case "v2":
    if err := apiClient.v1("I am version 2"); err != nil {
        log.Printf(" Error: Sending type v2")
        return err
    }
default:
    return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
}
甚至您也可以将多个案例合并为一个案例。 比如:


你试过什么?这不是一个困难的问题,我敢打赌,通过快速尝试,你可以找到答案。有这样的例子。还有。我在他们公然不尝试自己去弄清楚这一点与堆栈交换之间左右为难,有时“实现它,这样你就不必通过文档”的咒语偶然发现了这一点,在找别的东西。我喜欢这个答案,只是它和其他语言不一样。golang中的case可以是完全成熟的表达式,您可以打开的不仅仅是整数,而且在
case
s之间没有故障。
switch a.Type {
case "v1":
    if err := apiClient.v1("I am version one"); err != nil {
        log.Printf(" Error: Sending type v1")
        return err
    }
case "v2":
    if err := apiClient.v1("I am version 2"); err != nil {
        log.Printf(" Error: Sending type v2")
        return err
    }
default:
    return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
}
switch a.Type {
case "v1":
    if err := apiClient.v1("I am version one"); err != nil {
        log.Printf(" Error: Sending type v1")
        return err
    }
case "v2":
    if err := apiClient.v1("I am version 2"); err != nil {
        log.Printf(" Error: Sending type v2")
        return err
    }
case "v3", "v4":
    if err := apiClient.v1("I am version 3 or 4"); err != nil {
        log.Printf(" Error: Sending type v3 or v4")
        return err
    }
default:
    return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
}