Golang切换声明

时间:2017-08-04 21:15:05

标签: go switch-statement

我是golang的新手,从python切换到golang。如何在"开关"

中转换此if if语句
type Client struct {
    Type  string `json:"type"`
} 

然后我正在初始化这个结构:

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"))
    }

2 个答案:

答案 0 :(得分:7)

即使您可以通过阅读doc来自己解决这个问题,但您应该写一下:

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

答案 1 :(得分:-1)

这与任何其他编程语言一样,只是语法稍有变化。

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

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"))
}