🥥Flujo If, For, While, Switch
Aqui en está sección veremos algunos condicionales, ciclos y bucles dentro del lenguaje de programación Golang.
Flujo IF ->
Este es el tipo de condición en el cual si se cumple una verdad o una condición en especifico se realiza tal acción.
//FLUJO IF
edad := 18
if edad >= 18 && edad <= 55 {
fmt.Println("Es un adult@")
}else if edad < 18 {
fmt.Println("es un niñ@")
}else {
fmt.Println("Es un ancian@")
}
Ciclo FOR →
La estructura del ciclo for la usamos mucho para poder iterar sobre algunas estructuras de datos, arrays, maps, matrices, etc. esto con el fin de bajo un rango de iteraciones especificas lograr completar toda la estructura de datos o si no es para una estructura de datos simplemente realizar una acción n cantidad de veces
//FLUJO FOR
for i := 0; i <= 10; i++ {
fmt.Println("FOR:", i)
}
nombre := "Felipe"
for i := 0; i < 6; i++ {
fmt.Println(i, string(nombre[i]))
}
En GO no existe el WHILE (su palabra) →
En este caso bajo la sintaxis del lenguaje GO el while no existe como tal con la palabra while sin embargo se representa con el mismo for WTF? como así, exacto, simplemente cambia un poco la sintaxis convencional del FOR para ajustarse al while dentro de go, veamos:
package main
func main(){
edad := 22
for edad != 22{
fmt.Println("No entrará en la condición de while con el for")
}
//Pero si lo modificamos un poco para que sea un bucle while "infinito" se podría decir, sería así
edad2 := 22
for edad2 != 23{
fmt.Println("Va a entrar en este ciclo interminable")
//Realmente es finito, hasta donde aguanten los recursos del sistema o pc.
}
}
Sentencia BREAK →
En Go, la instrucción
break
finaliza la ejecución del bucle actual. Una instrucciónbreak
casi siempre se sincroniza con una instrucción condicionalif
.Es importante recordar que la instrucción
break
solo detendrá la ejecución del bucle más interno en el que se invoca. Si tiene un conjunto de bucles anidados, necesitará una instrucción break para cada bucle, si lo desea.
for i := 0; i < 10; i++ {
if i == 5 {
fmt.Println("Breaking out of loop")
break // break here
}
fmt.Println("The value of i is", i)
}
fmt.Println("Exiting program")
Sentencia Continue →
La instrucción
continue
se usa cuando se busca omitir la parte restante del bucle, volver a la parte superior de este y continuar con una nueva iteración.Como en el caso de la instrucción
break
, la instruccióncontinue
se utiliza comúnmente con una instrucciónif
condicional.
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 5 {
fmt.Println("Continuing loop")
continue // break here
}
fmt.Println("The value of i is", i)
}
fmt.Println("Exiting program")
}
Sentencia RANGE →
Range
es una palabra clave que se utiliza en conjunto con la instrucción for
para crear bucles que recorren elementos de una colección. Esta colección puede ser un array, un slice, un mapa, un canal o incluso una cadena de texto.
Destacar la palabra clave range que nos permite poder iterar con secuencia de datos. range devuelve siempre dos argumentos: índice y valor. Para ignorar cualesquiera de los valores devueltos hay que usar _ para que el compilador de Go entienda que no vamos a usar esa variable.
¿Cómo funciona Range?
En términos simples, range
descompone la colección en sus elementos individuales y los asigna a variables dentro del bucle for
. Cada iteración del bucle procesa un elemento de la colección.
Sintaxis basica:
for <variable> := range <colección> {
// Bloque de código que se ejecuta para cada elemento
}
Recorrer un array:
numeros := []int{1, 2, 3, 4, 5}
for numero := range numeros {
fmt.Println(numero)
}
Recorrer un mapa:
paises := map[string]string{
"es": "España",
"mx": "México",
"co": "Colombia",
}
for pais, nombre := range paises {
fmt.Println(pais, ":", nombre)
}
En este caso, range
devuelve dos valores: la clave (pais
) y el valor (nombre
) del mapa. El bucle itera sobre cada par clave-valor del mapa, imprimiendo la información en formato clave:valor.
Ignorar valores: Si solo te interesa la clave o el valor de una colección, puedes usar un guion bajo (_) como marcador de posición para ignorar el valor no deseado.
for pais := range paises {
fmt.Println(pais)
}
Obtener índice y valor: En el caso de arrays y slices, puedes obtener el índice actual del elemento además del valor utilizando dos variables.
numeros := []int{1, 2, 3, 4, 5}
for i, numero := range numeros {
fmt.Println(i, ":", numero)
}
Recorrer cadenas: Range
también funciona con cadenas de texto, iterando sobre cada carácter Unicode.
frase := "Hola mundo!"
for _, caracter := range frase {
fmt.Println(caracter)
}
Dominar el uso de range
me ayudará a escribir código más limpio, conciso y fácil de entender. Experimenta con range
en tus propios proyectos y descubre todo su potencial.
Sentencia Switch →
La instrucción switch
comienza con la palabra clave switch
y le sigue, en su forma más básica, alguna variable contra la cual puedan realizarse comparaciones. A esto le sigue un par llaves ({}
) en el que pueden aparecer varias_ cláusulas de caso_. Las cláusulas de caso describen las acciones que su programa de Go debe realizar cuando la variable proporcionada a la instrucción switch es igual al valor referido por las cláusulas de caso. El siguiente ejemplo convierte el ejemplo anterior para que utilice switch
en lugar de varias instrucciones if
:
//SENTENCIA SWITCH
var frutas map[string]int = map[string]int{"pera": 1, "manzana": 2, "sandia": 3} //map almacena en clave:valor
for fruta, precio := range frutas {
if fruta == "pera" {
fmt.Println("Es una pera con precio:", precio)
continue
} else if fruta == "manzana" {
fmt.Println("Es una manzana con precio:", precio)
continue
} else {
fmt.Println("Es una sandia, su precio es:", precio)
break
}
}
//PARA ESTE TIPO DE CONDICIONALES ES QUE USAMOS LA SETENCIA SWITCH, debido a que se manejan multiples valores para una variable que recorremos, en este frutas en un map.
for fruta, _ := range frutas {
switch fruta {
case "sandia":
fmt.Println("Es sandia")
case "manzana":
fmt.Println("Es manzana")
default:
fmt.Println("Es pera")
}
}
Switch funciona para esos casos else para poder englobar y tomar todo lo general, evitando muchos else if’s.
Juego de adivinanzas con sentencia Switch →
target := rand.Intn(100)
for {
var guess int
fmt.Print("Enter a guess: ")
_, err := fmt.Scanf("%d", &guess)
if err != nil {
fmt.Println("Invalid guess: err:", err)
continue
}
switch {
case guess > target:
fmt.Println("Too high!")
case guess < target:
fmt.Println("Too low!")
default:
fmt.Println("You win!")
return
}
}
Eso sería todo si llegaste hasta aquí gracias por leerme y espero te haya servido :)
Last updated