Skip to content

Commit 7e14d04

Browse files
committed
1 parent 5ee9933 commit 7e14d04

File tree

1 file changed

+142
-0
lines changed

1 file changed

+142
-0
lines changed
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
// 1. Bucle for básico
7+
for i := 1; i < 10; i++ {
8+
fmt.Println(i)
9+
}
10+
11+
// 2. Bucle for con condición
12+
i := 1
13+
for i < 10 {
14+
fmt.Println(i)
15+
i++
16+
}
17+
18+
// 3. Bucle infinito con break
19+
i = 1
20+
for {
21+
if i > 10 {
22+
break
23+
}
24+
fmt.Println(i)
25+
i++
26+
}
27+
28+
// 4. Iteración sobre un Array
29+
numsArray := [10]int{1, 2, 3, 5, 6, 7, 8, 9, 10}
30+
for i, num := range numsArray {
31+
fmt.Printf("Índice: %v, Valor: %d\n", i, num)
32+
}
33+
34+
// Iteración sobre un Slice
35+
numSlice := [10]int{1, 2, 3, 5, 6, 7, 8, 9, 10}
36+
for _, number := range numSlice {
37+
fmt.Println(number)
38+
}
39+
40+
// 6. Iteración sobre un Map
41+
numsMap := map[string]int{"uno": 1, "dos": 2, "tres": 3, "cuatro": 4, "cinco": 5, "seis": 6, "siete": 7, "ocho": 8, "nueve": 9, "diez": 10}
42+
for key := range numsMap {
43+
fmt.Println(key, numsMap[key])
44+
}
45+
46+
// Iteración sobre una cadena de texto
47+
text := "Hola Mundo"
48+
for i, char := range text {
49+
fmt.Printf("Índice: %v, Caracter: %c\n", i, char)
50+
}
51+
52+
// 8. Iteración sobre un canal
53+
numsChan := make(chan int)
54+
go func() {
55+
for i := 1; i <= 10; i++ {
56+
numsChan <- i
57+
}
58+
close(numsChan)
59+
}()
60+
for num := range numsChan {
61+
fmt.Println(num)
62+
}
63+
64+
// 9. Iteración sobre un canal con select
65+
numsChan1 := make(chan int)
66+
numsChan2 := make(chan int)
67+
go func() {
68+
for i := 1; i <= 10; i++ {
69+
numsChan1 <- i
70+
numsChan2 <- i
71+
}
72+
close(numsChan1)
73+
close(numsChan2)
74+
}()
75+
for {
76+
select {
77+
case num, ok := <-numsChan1:
78+
if !ok {
79+
numsChan1 = nil
80+
} else {
81+
fmt.Println("Canal 1:", num)
82+
}
83+
case num, ok := <-numsChan2:
84+
if !ok {
85+
numsChan2 = nil
86+
} else {
87+
fmt.Println("Canal 2:", num)
88+
}
89+
}
90+
if numsChan1 == nil && numsChan2 == nil {
91+
break
92+
}
93+
}
94+
95+
// 9. Iteración con una función recursiva
96+
var recursivePrint func(int)
97+
recursivePrint = func(n int) {
98+
if n > 10 {
99+
return
100+
}
101+
fmt.Println(n)
102+
recursivePrint(n + 1)
103+
}
104+
recursivePrint(1)
105+
106+
// 10. Iteración con un defer
107+
for i := 1; i <= 10; i++ {
108+
defer fmt.Println(i)
109+
}
110+
fmt.Println("Fin del programa")
111+
112+
// 11. Iteración con un defer y una función anónima
113+
for i := 1; i <= 10; i++ {
114+
defer func() {
115+
fmt.Println(i)
116+
}()
117+
}
118+
fmt.Println("Fin del programa")
119+
120+
// 12. Iteracion con goto (No Recomendado)
121+
i = 1
122+
Loop:
123+
if i <= 10 {
124+
fmt.Println(i)
125+
i++
126+
goto Loop
127+
}
128+
129+
/*
130+
El uso de goto para crear bucles no es recomendado en la mayoría de los lenguajes de programación, incluyendo Go, por varias razones:
131+
132+
Legibilidad: El uso de goto puede hacer que el flujo del programa sea difícil de seguir y entender. Los bucles for y while son estructuras de control más claras y fáciles de leer.
133+
134+
Mantenimiento: El código que utiliza goto puede ser más difícil de mantener y depurar. Los saltos incondicionales pueden llevar a errores difíciles de rastrear y corregir.
135+
136+
Estructura: Los lenguajes modernos promueven el uso de estructuras de control más estructuradas y legibles, como los bucles for, while, y las funciones recursivas. Estas estructuras ayudan a mantener el código organizado y comprensible.
137+
138+
Errores: El uso de goto puede llevar a errores como bucles infinitos o saltos a etiquetas incorrectas, lo que puede causar comportamientos inesperados en el programa.
139+
140+
En resumen, aunque goto puede ser útil en casos muy específicos, generalmente es mejor evitar su uso y optar por estructuras de control más claras y seguras.
141+
*/
142+
}

0 commit comments

Comments
 (0)