Golang switch语句

huangapple go评论113阅读模式
英文:

Golang switch statement

问题

我是你的中文翻译助手,以下是你提供的代码的翻译:

我刚开始学习golang,并从python转到了golang。我该如何将这个if else语句转换为"switch"语句?

  1. type Client struct {
  2. Type string `json:"type"`
  3. }
  4. func main() {
  5. a := Client{"v1"}
  6. switch a.Type {
  7. case "v1":
  8. if err := apiClient.v1("I am version one"); err != nil {
  9. log.Printf(" Error: Sending type v1")
  10. return err
  11. }
  12. case "v2":
  13. if err := apiClient.v2("I am version 2"); err != nil {
  14. log.Printf(" Error: Sending type v2\n")
  15. return err
  16. }
  17. default:
  18. return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
  19. }
  20. }

希望这可以帮助到你!如果你有任何其他问题,请随时问我。

英文:

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

  1. type Client struct {
  2. Type string `json:"type"`
  3. }

Then I am initializing this struct like this:

  1. a:= Client{"v1"}
  2. if a.Type == "v1" {
  3. if err := apiClient.v1("I am version one"); err != nil {
  4. log.Printf(" Error: Sending type v1")
  5. return err
  6. }
  7. } else if a.Type == "v2" {
  8. if err := apiClient.v2("I am version 2"); err != nil {
  9. log.Printf(" Error: Sending type v2\n")
  10. return err
  11. }
  12. } else {
  13. return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
  14. }

答案1

得分: 10

即使你可以通过阅读这里的文档来自己弄清楚,以下是你应该写的内容:

  1. switch a.Type {
  2. case "v1":
  3. // ...
  4. // 在 Go 中不需要使用 'break'
  5. case "v2":
  6. // ...
  7. default:
  8. // 常规的 'else' 子句语句
  9. }
英文:

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

  1. switch a.Type {
  2. case "v1":
  3. // ...
  4. // no need to 'break' in go
  5. case "v2":
  6. // ...
  7. default:
  8. // usual 'else' clause statements
  9. }

答案2

得分: -1

这与其他编程语言相同,只是语法稍有不同。

你可以按照以下方式使用switch case:

  1. switch a.Type {
  2. case "v1":
  3. if err := apiClient.v1("I am version one"); err != nil {
  4. log.Printf(" Error: Sending type v1")
  5. return err
  6. }
  7. case "v2":
  8. if err := apiClient.v1("I am version 2"); err != nil {
  9. log.Printf(" Error: Sending type v2")
  10. return err
  11. }
  12. default:
  13. return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
  14. }

甚至可以将多个case合并为一个。

  1. switch a.Type {
  2. case "v1":
  3. if err := apiClient.v1("I am version one"); err != nil {
  4. log.Printf(" Error: Sending type v1")
  5. return err
  6. }
  7. case "v2":
  8. if err := apiClient.v1("I am version 2"); err != nil {
  9. log.Printf(" Error: Sending type v2")
  10. return err
  11. }
  12. case "v3", "v4":
  13. if err := apiClient.v1("I am version 3 or 4"); err != nil {
  14. log.Printf(" Error: Sending type v3 or v4")
  15. return err
  16. }
  17. default:
  18. return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
  19. }
英文:

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

you can use switch case as follow :

  1. switch a.Type {
  2. case "v1":
  3. if err := apiClient.v1("I am version one"); err != nil {
  4. log.Printf(" Error: Sending type v1")
  5. return err
  6. }
  7. case "v2":
  8. if err := apiClient.v1("I am version 2"); err != nil {
  9. log.Printf(" Error: Sending type v2")
  10. return err
  11. }
  12. default:
  13. return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
  14. }

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

  1. switch a.Type {
  2. case "v1":
  3. if err := apiClient.v1("I am version one"); err != nil {
  4. log.Printf(" Error: Sending type v1")
  5. return err
  6. }
  7. case "v2":
  8. if err := apiClient.v1("I am version 2"); err != nil {
  9. log.Printf(" Error: Sending type v2")
  10. return err
  11. }
  12. case "v3", "v4":
  13. if err := apiClient.v1("I am version 3 or 4"); err != nil {
  14. log.Printf(" Error: Sending type v3 or v4")
  15. return err
  16. }
  17. default:
  18. return errors.New(fmt.Sprintf(" Error: Invalid mertype...This Type"))
  19. }

huangapple
  • 本文由 发表于 2017年8月5日 05:15:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/45515604.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定