Golang switch语句

I am new to golang and switched from python to golang. How can I convert this if else statement in a "switch"

type Client struct {
    Type  string `json:"type"`
} 

Then I am initializing this struct like this:

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
")
        return err
    }
}  else {
        return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
    }

Even though you could figure it out yourself by reading the doc here is what you should write:

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

This is same like any other programming language, just syntax is little bit changed.

you can use switch case as follow :

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

Even you can combine multiple cases into one too. like :

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