我是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"))
}
答案 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"))
}