Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |not checked

Bucles en go (Golang)

Go solo posee una forma de hacer bucles o loops esta es con for, y hay varias maneras de hacer lo mismo que hacemos en otros lenguajes.

Recorrido Clásico

Para hacer un recorrido clásico como se hace en todos los lenguajes solo tienes que hacer la variable a iterar, la condición y lo que hará luego con la variable de iteración, la sintaxis:

for init; condition; post { }

Veamos un ejemplo de lo anterior:

Recorrido con fin
sum := 0
for i := 0; i < 10; i++ {
    sum += i
}

Break y Continue

En caso de tener que parar el for lo puedes realizar con break,

También se puede usar continué para continuar con la iteración si es necesario

Program loop(Bucle infinito en go)

En caso de que tengas que hacer un program loop o loop infinito, como pueden ser los game loop puedes hacerlo con:

for{}

Para salir del loop infinito puedes usar un if condicion{}

for{
   if(condicion){
      break
   }
}

De esta manera podemos hacer un bucle en go que no tiene fin hasta que se cumpla la condicion de salir de el

Equivalente a un While y do-while

Esta forma de usar el if también nos sirve para simular un While, ¿podemos simular un do-while? Si exacto como ya debes estar pensando el lugar donde esté la condición, le hará tener cierto comportamiento.

for{
   if(condicion){
      break
   }
   //code
}

El código siguiente es el equivalente a realizar un do-while

for{
   //code
   if(condicion){
      break
   }
}

Simulando un foreach de PHP

Esta es sin dudas la mejor manera de recorrer un array en go.

si en golang queremos hacer un foreach probablemente nos preguntaremos como bueno, podemos simular el comportamiento de foreach con la funcion range() veamos un ejemplo sencillo:

// You can edit this code!
// Click here and start typing.
package main

import "fmt"

func main() {
	v :=[]string{"a","2","1"}
	
	for _,element := range(v){
		fmt.Println(element)
	}
}

En el ejemplo v es un slice, algo muy parecido a un array la gran diferencia entre este y un array es que su tamaño es dinámico, lo veremos en más detalle más adelante.

Además observé que en for declaramos element, _ por el contrario indica que ese valor devuelto no es de nuestro interés, esto es debido a que range devuelve el index y el elemento en nuestro caso no nos interesa utilizar el index.

Esto va obteniendo cada elemento y lo va imprimiendo en pantalla.

Ahora un ejemplo mas complicado:

En el ejemplo a continuación vea que el array v cambiara agregandole elementos del array a

package main

import "fmt"

func main() {
        a:=[]string{"b","c","d","mm","222"}
	v :=[]string{"a","2","1"}
	
	for i,_ := range(v){
		v =append(v,a[i])
	}
	for _,xx := range(v){
		fmt.Println(xx)
	}
}
a
2
1
b
c
d

Program exited.

Importante: Esto no quiere decir que esté recorriendo los elementos nuevos agregados, v dentro de range no cambia.

Category: go
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category