Cargando...

Uso de Switch y Keywords en Go

Aprende, por medio de un conjunto de algoritmos, a realizar validaciones de casos, qué son las Keywords, la ejecución diferida, de parada y continua en Go.

Condicionales

Anteriormente hemos visto cómo hacer condicionales con if, ahora le toca a nuestro amigo switch.

Switch

Te mostraré por medio de ejemplos prácticos, el uso de este tipo de condicionales.

Primero, segundo o tercero

Este es muy fácil de entender, se trata de que un valor inicial i=2, se verifique y entre en la segunda condición y seguido imprima un string.

package main

import (
    "fmt"
)

func main() {
    i := 2
    fmt.Print("Write ", i, " as ")
    switch i {
    case 1:
        fmt.Println("First")
    case 2:
        fmt.Println("Second")
    case 3:
        fmt.Println("Third")
    }
}
go run first_second_or_third.go

#Output
Write 2 as Second

Conocer el tiempo, mañana o tarde

Este es divertido, importaremos la librería time y con la instrucción time.Now().Hour() conoceremos la hora actual, al menos la que tiene el sistema en este momento. Si es menor a 12, es de mañana, de lo contrario, es de tarde, después de medio día.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("It's before noon")
    default:
        fmt.Println("It's after noon")
    }
}
go run before_or_after_noon.go

#Output
It's after noon

Fin de semana o día de semana

Con el siguiente ejercicio buscamos validar si el día actual está dentro del fin de semana o día de semana.

package main

import (
    "fmt"
    "time"
)

func main() {
    switch time.Now().Weekday() {
    case time.Saturday, time.Sunday:
        fmt.Println("It's the weekend")
    default:
        fmt.Println("It's a weekday:", time.Now().Weekday())
    }
}
go run weekend_or_weekday.go

#Output
It's a weekday: Friday

Tipo de dato de una variable

La idea es pasar una variable al switch y que este verifique qué tipo de dato es. Este ejercicio es muy interesante, ya que creamos una función anónima, almacenada en una variable, donde se le pasa una interfaz cómo parámetro.

package main

import (
    "fmt"
)

func main() {
    whatAmI := func(i interface{}) {
        switch t := i.(type) {
        case bool:
            fmt.Println("I'm a bool")
        case int:
            fmt.Println("I'm an int")
        default:
            fmt.Printf("Don't know type %T\n", t)
        }
    }

    whatAmI(true)
    whatAmI(1)
    whatAmI("hey")
}
go run data_type.go

#Output
I'm a bool
I'm an int
Don't know type string

Contador de vocales

Este me parece que no necesita explicación, pues se trata de contar las vocales que hay en una frase, además de obtener la cantidad de repetición de cada vocal.

package main

import "fmt"

func vowelsCounter(sentence string) (int, int, int, int, int) {
    counter_a := 0
    counter_e := 0
    counter_i := 0
    counter_o := 0
    counter_u := 0
    for _, value := range sentence {
        variable := string(value)
        switch variable {
        case "a":
            counter_a++
        case "e":
            counter_e++
        case "i":
            counter_i++
        case "o":
            counter_o++
        case "u":
            counter_u++
        }
    }
    return counter_a, counter_e, counter_i, counter_o, counter_u
}

func main() {

    sentence := "For example, this is a litter sentence with a lot of vowels"
    a, e, i, o, u := vowelsCounter(sentence)
    fmt.Printf("Phrase '%s' has: \n", sentence)
    fmt.Printf("%d vowel a \n", a)
    fmt.Printf("%d vowel e \n", e)
    fmt.Printf("%d vowel i \n", i)
    fmt.Printf("%d vowel o \n", o)
    fmt.Printf("%d vowel u \n", u)
}
go run vowel_counter.go

#Output
Phrase 'For example, this is a litter sentence with a lot of vowels' has: 
3 vowel a 
7 vowel e
4 vowel i
4 vowel o
0 vowel u


Keywords

Defer

La idea es que esta palabra reservada (viene de diferido), espere a que el programa finalice y ejecuta los defers.

package main

import "fmt"

func main() {
    fmt.Println("Start")
    for i := 0; i < 5; i++ {
        defer fmt.Println(i)
    }
    fmt.Println("End")
}
go run defer.go

#Output
Start
End
4  
3  
2  
1  
0

Todo lo que está para ejecutarse con defer, este lo guarda y lo resuelve hasta el final, cabe destacar que, si hay varios defer definidos, tal y como sucede en este ejemplo, este se almacena en una cola LIFO (Last in First Out / Último en entrar, primero en salir).

package main

import "fmt"

func multiplication(a, b int) int {
    return (a * b)
}

func show() {
    fmt.Println("Hello, my name is Antonio!")
}

func main() {

    fmt.Println("Result is:", multiplication(10, 10))

    defer fmt.Println("Result is:", multiplication(15, 15))

    show()
}
go run defer_with_functions.go

#Output
Result is: 100
Hello, my name is Antonio!
Result is: 225

Break

Este rompe con el ciclo o condición.

package main

import "fmt"

func main() {
    var i uint8 = 0
    for i < 10 {
        fmt.Println(i)
        i++

        if i == 8 {
            fmt.Println("Break!")
            break
        }
    }
}
go run break.go

#Output
0
1
2
3
4
5
6
7
Break!

Continue

El continue rompe con lo que se encuentra dentro del ciclo y continua con la siguiente iteración, saltando lo que haya dentro del ciclo.

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i == 2 {
            continue
        }
        fmt.Print(i, "\n")
    }
}
go run continue.go

#Output
0
1
3
4
5
6
7
8
9

Defer + Continue + Break

package main

import "fmt"

func main() {
    defer fmt.Println("Hola")
    fmt.Println("Mundo")

    for i := 0; i < 10; i++ {

        if i == 2 {
            fmt.Println("es 2")
            continue
        }

        fmt.Println(i)

        if i == 5 {
            break
        }
    }
}
go run defer_continue_break.go

#Output
Mundo
0
1
es 2
3
4
5
Hola

Estos han sido algunos ejemplos del modo de uso de las palabras claves defer, continue y break en Go, además de profundizar en la forma de hacer validaciones con la instrucción switch.

Recurso principal donde puedes ver adelantos, además de todos los programas escritos:

Repositorio: 30 días de Go.

Recursos




  • John Doe
    43 Sales$156,24 Totals
    62%
  • Rosy O'Dowell
    12 Leads$56,24 Totals
    32%

With supporting text below as a natural lead-in to additional content.

Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled.