Golang switch语句

问题描述 投票:-3回答:2

我是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"))
    }
go switch-statement
2个回答
7
投票

即使你可以通过阅读doc自己弄清楚这是你应该写的:

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

-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"))
}
© www.soinside.com 2019 - 2024. All rights reserved.