Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |finished | checked

The switch Statement in Go

When we use switch in Go, we’re evaluating a condition and defining different outcomes for each case. It’s like writing multiple if-else statements using the same variable as the condition.

Let’s try a simple example:

day := "monday"
switch day {
  case "monday":
     fmt.Println("es lunes")

  case "tuesday":
     fmt.Println("es martes")

  case "wednesday":
     fmt.Println("es miercoles")

  case "thursday":
     fmt.Println("es jueves")

  case "friday":
     fmt.Println("es viernes")

  case "saturday":
     fmt.Println("es sabado")

  case "sunday":
     fmt.Println("es sunday")

  default:
     fmt.Println("es sunday")
}
es lunes

Notice that this switch isn’t the same as switch statements in other programming languages. For example, in PHP, the switch would continue printing “It’s Monday,” “It’s Tuesday,” and so on unless you explicitly use break. In Go, we didn’t have to use break at all.

But if you do want the switch to continue executing the following cases, you can use:

fallthrough

Using the previous example, let’s add a fallthrough inside the "monday" case:

day := "monday"
switch day {
  case "monday":
     fmt.Println("is monday")
     fallthrough 

  case "tuesday":
     fmt.Println("is tuesday")

  case "wednesday":
     fmt.Println("is wednesday")

  case "thursday":
     fmt.Println("is thursday")

  case "friday":
     fmt.Println("is friday")

  case "saturday":
     fmt.Println("is saturday")

  case "sunday":
     fmt.Println("is sunday")

  default:
     fmt.Println("is sunday")
}
es lunes
es martes

We may check the OS with switch

switch os := runtime.GOOS; os {
   case "darwin":
      fmt.Println("OS X.")
   case "linux":
      fmt.Println("Linux.")
   default:
      // freebsd, openbsd,
      // plan9, windows...
      fmt.Printf("%s.\n", os)
}

With this short snippet, you can check which operating system you’re on—a very handy piece of code if you are programming for desktop

check the code in https://play.golang.org/p/IHx1N8Vj7j3

Using switch for comparisons in Go

Another useful feature of switch in Go is that it can be used for comparison-based logic. In certain situations, it’s more convenient to use switch instead of multiple if, else if, and else statements.

package main

import (
	"fmt"
)

func classifyAge(age int) {
	switch {
	case age < 13:
		fmt.Printf("Age %d: Child\n", age)
	case age >= 13 && age < 18:
		fmt.Printf("Age %d: Teenager\n", age)
	case age >= 18 && age < 60:
		fmt.Printf("Age %d: Adult\n", age)
	default:
		fmt.Printf("Age %d: Senior\n", age)
	}
}

func main() {
	classifyAge(10)
	classifyAge(15)
	classifyAge(30)
	classifyAge(70)
}

This method of comparison is not posible via switch in some other languages.

Type Switch

Type switch isn't something you'll use very often—but it exists, so we might as well cover it.

Imagine you need to know the type of a variable you're receiving. In that case, you can use a type switch to take an action depending on what type it is.

Go provides a simple example of how this works in its official Tour

package main

import "fmt"

func do(i interface{}) {
	switch v := i.(type) {
	case int:
		fmt.Printf("Twice %v is %v\n", v, v*2)
	case string:
		fmt.Printf("%q is %v bytes long\n", v, len(v))
	default:
		fmt.Printf("I don't know about type %T!\n", v)
	}
}

func main() {
	do(21)
	do("hello")
	do(true)
}

You’ll notice that the case values here are common types like int, string, and bool. You can also match pointers to those types, or even custom types and their pointers.

Keep in mind:
📌 You’ll need to use interface{} as the input type, because Go checks the concrete type stored inside the interface.

Category: en-go
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Recent articles