-
Notifications
You must be signed in to change notification settings - Fork 13
/
Go.txt
534 lines (368 loc) · 12.6 KB
/
Go.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
================
Guía de Go by dM
================
¿Qué es Go o Golang?
====================
Go es un lenguaje de programación relativamente nuevo, su lanzamiento oficial
fue a finales de 2009 (aunque su primera versión estable fue en 2012), por lo
que no lleva ni una década entre nosotros. ¿Y qué hace que el lenguaje Go sea
lo que todos esperan? Más allá de que haya sido desarrollado por Google,
puntualmente por Ken Thompson, Rob Pike y Robert Griesemer "que no es poco", las
características de Go y su desempeño son las que nominan a este lenguaje de
programación como el enésimo sustituto natural de C. ¿Será verdad esta vez?
Veamos las características de Go y para qué sirve go.
Características de Go
=====================
El Lenguaje Go, al igual que C y C++, es un lenguaje compilado y concurrente, o
en otras palabras: soporta canales de comunicación basados en el lenguaje CSP.
Sin embargo, dentro de las características de Go aparece su concurrencia. En Go
es diferente a los criterios de programación basados en bloqueos como pthreads.
Los creadores de Go, además, se inspiraron en la versatilidad y las cualidades
de otros lenguajes como Python, C++ y Java (entre otros), para conseguir un
lenguaje con las siguientes características, algunas únicas, y otras compartidas
con otros lenguajes compilados.
Simplicidad
===========
Otra de las características de Go es su simplicidad. Lenguajes como C++, Java o
C# son más pesados y voluminosos que Go. La simplicidad es la característica
principal de Go. Con una sintaxis clara, limpia y organizada, la idea de la
programación en Go es diferenciarse de la complejidad de C. Comparando ambos
lenguajes compilados, vemos que Go utiliza inferencia implícita de tipos para
así poder evitar la declaración explícita de variables que tienen lugar en C.
Funcionalidades
===============
Pero ¿para qué sirve go? Aun siendo un lenguaje diseñado para la programación de
sistemas, lenguaje Go dispone de un recolector de basura como la mayoría de los
lenguajes modernos. El recolector de basura de Go está siendo reimplementado
para reducir la latencia todo lo posible. Y a pesar de no ser un lenguaje
orientado a objetos (no existe jerarguía de tipos), Go admite su paradigma.
Aunque a diferencia de los lenguajes orientados a objetos más populares, no
dispone de herencia de tipos ni de palabras clave que denoten claramente que
soporta este paradigma.
Facilidad de uso
================
El lenguaje Go usa tipado estático y es tan eficiente como C. Está pensado para
facilitar la vida al máximo a los programadores. Permite detectar errores en la
sintaxis durante la compilación y no durante la ejecución, a diferencia de otros
lenguajes compilados. Sin embargo, después de programar algo más que un
«Hola Mundo», enseguida se puede sentir una sensación agradable al programar.
Además, los programadores que hayan usado C se sentirán extremadamente cómodos,
ya que Go posee una sintaxis muy parecida.
Compatibilidad
==============
Al igual que otros muchos lenguajes "pero no por ello deja de ser importante",
el lenguaje de programación Go es compatible con sistemas Windows, Mac OS X,
Linux y FreeBSD.
Go vs C. ¿Llegó su recambio natural?
====================================
El lenguaje de programación Go siempre ha estado acompañado de mucho ruido a su
alrededor. El hecho de que Google esté detrás siempre aumentará el eco de todo
lo que ocurra, y a veces puede jugar en su contra. Como el hecho de ser
bautizado como «el nuevo C». Pero es en el momento de probar Go cuando uno se da
cuenta de que todo el ruido de alrededor está justificado, más allá del
marketing y el «fanboyismo».
Go es un lenguaje de programación que posee unas características únicas para
hacerse con una buena parte del mercado.
Instalación en GNU/Linux Debian
===============================
Nota: Probado en GNU/Linux Debian 11
Instalar el paquete golang desde los repositorios de Debian:
$ sudo apt install golang
Comprobar la correcta instalación:
$ go version
Mostrará algo como:
go version go1.15.15 linux/amd64
Hola mundo simple
=================
1- Creamos un archivo llamado prueba.go
Todos los archivos de Go tienen que tener esa extensión .go.
Abrimos el archivo creado, y lo primero que hay que definir es el paquete main:
package main
También debemos importar el paquete fmt que incluye un monton de métodos útiles
como el print que nos permite mostrar por pantalla información:
import "fmt"
Ahora se debe crear la función main que es la función por defecto de nuestro
paquete main:
func main () {
}
Ahora lo siguiente que vamos a hacer es imprir algo por pantalla o por la
consola, usaremos fmt.Print:
func main () {
fmt.Print("Hola mundo!")
}
En Go no hace falta finalizar o cerrar las líneas con punto y coma (;)
El ejemplo completo sería:
package main
import "fmt"
func main () {
fmt.Print("Hola mundo!")
}
Por tanto ya podríamos ejecutar este código, abrimos la consola, nos ubicamos
a la ruta donde guardamos a prueba.go y ejecutamos:
$ go run prueba.go
Nos debe imprimir
Hola mundo!
Comentarios de código
=====================
// Comentario de una línea
/*
Comentario de
múltiples
líneas
*/
Método Println() para imprimir en una nueva línea:
Cada Println imprime en una línea distinta o separada
fmt.Println("Hola")
fmt.Println("mundo!")
Variables
=========
Las variables en Go se definen con la palabra reservada "var" y el nombre de la
variable.
En Go, puedo guardar cualquier tipo de dato dentro de una variable, enteros,
arreglos, listas, cadenas.
Tampoco hace falta definir el tipo de variable
Ejemplo:
var nombre = "Jose"
var edad = 34
Ahora podemos mostra esos datos por pantalla con:
package main
import "fmt"
func main () {
var nombre = "Jose"
var edad = 34
fmt.Println(nombre)
fmt.Println(edad)
}
Concatenación
=============
En un mismo Println podemos usar la coma "," para concatenar, ejemplo:
package main
import "fmt"
func main () {
var nombre = "Jose"
var edad = 34
fmt.Println("Mi nombre es:", nombre)
fmt.Println("Mi edad es:", edad)
}
Print más estricto
==================
Podemos indicarle a print cual es el tipo de valor que voy a mostrar, por
ejemplo solo cadenas con "%s"
package main
import "fmt"
func main () {
var nombre = "Jose"
var edad = 34
fmt.Println("Mi nombre es:", nombre)
fmt.Printf("%s %s","Mi edad es:", edad)
}
se usa Printf y como primero parámetro tenemos a "%s %s" que indica que lo que
sigue deben ser 2 cadenas, como edad es un entero esto dará un error al
ejecutarlo porque está esperando 2 cadenas, no una cadena y un entero:
Mi nombre es: Jose
Mi edad es: %!s(int=34)
Si quiero imprimir un entero debería usar "%d" tal que:
package main
import "fmt"
func main () {
var nombre = "Jose"
var edad = 34
fmt.Println("Mi nombre es:", nombre)
fmt.Printf("%s %d","Mi edad es:", edad)
}
Lo anterior ya no debe dar error y debe imprimir los datos correctos.
Entrada de datos
================
Nos va a permitir recolectar datos introducidos por pantalla y procesar esos
datos.
Por ejemplo vamos a solicitar el apellido del usuario:
fmt.Print("¿Cuál es tu apellido?: ")
Eso solo imprime el texto, para poder que el usuario pueda escribir hay que usar
Scan(), y también vamos a crear una variable llamada apellida y definimos que va
a almacenar una cadena, ejemplo:
var apellido string
var edad int // Variable que recibe un número entero
fmt.Print("¿Cuál es tu apellido?: ")
fmt.Scan(&apellido)
Ahora vamos a mostrar el valor de la variable apellido:
package main
import "fmt"
func main () {
var apellido string
fmt.Println("¿Cuál es tu apellido?: ")
fmt.Scan(&apellido)
fmt.Println(apellido)
}
Ejemplo de sumar 2 números pedidos por pantalla:
package main
import "fmt"
func main () {
var a int
var b int
var c int
fmt.Print("Número a: ")
fmt.Scan(&a)
fmt.Print("Número b: ")
fmt.Scan(&b)
c = a + b
fmt.Println("a más b es igual a: ", c)
}
Condiciones
===========
Consiste en un tipo de estructura de control que va a ejecutar un código
dependiendo de si se cumple una condición o no.
Ejemplo de la condición if y else:
package main
import "fmt"
func main () {
var altura int
fmt.Print("¿Cuál es tu altura en cm?: ")
fmt.Scan(&altura)
fmt.Println("Tu altura es:", altura, "cm")
if altura >= 185 {
fmt.Println("Eres una persona alta")
} else {
fmt.Println("Eres una persona baja")
}
}
El código anteior indica que si la altura es mayor o igual a 185, mostrará por
pantalla que es una persona alta, de lo contrario, mostrará que es una persona
baja.
Funciones
=========
Una función es un bloque de código que puedes ejecutar cuantas veces quisieras
invocandolo. Una función generalmente lo que hace es procesar datos y devolver
un resultado.
Lo primero que hay que hacer es declarar la función, por ejemplo:
func mostarAltura()
Que en este ejemplo va a recibir 1 parámetro que es la altura de tipo entero,
y esa función va a devolver una cadena, por eso usamos string:
func mostarAltura(altura int) string {
}
Ejemplo completo:
package main
import "fmt"
func mostarAltura(altura int) string {
var resultado string
if altura >= 185 {
resultado = ("Eres una persona alta")
} else {
resultado = ("Eres una persona baja")
}
return resultado
}
func main () {
fmt.Println(mostarAltura(170))
}
Esto imprime:
Eres una persona alta
Ahora vamos a solicitar la altura por pantalla:
package main
import "fmt"
func mostarAltura(altura int) string {
var resultado string
if altura >= 185 {
resultado = ("Eres una persona alta")
} else {
resultado = ("Eres una persona baja")
}
return resultado
}
func main () {
var altura int
fmt.Println("¿Cuál es tu altura en cm?")
fmt.Scan(&altura)
fmt.Println(mostarAltura(altura))
}
Ejemplo de sumar números:
package main
import "fmt"
func mostrarSuma(a int,b int) int {
var c int
c = a + b
return c
}
func main () {
var a = 3
var b = 5
fmt.Println(mostrarSuma(a,b))
}
Arrays o Listas
===============
Es una variable donde dentro puedo almacenar multiples valores, generalmente
del mismo tipo pero no necesariamente siempre es así.
Un ejemplo es el siguiente, creamos una variable llamada personas y dentro
va tener un array de 3 elementos que definimos en corchetes y también definimos
el tipo de dato que será string:
package main
import "fmt"
func main () {
var personas = [3] string {"José", "María", "Juan"}
fmt.Println(personas)
}
Lo anteior nos imprime:
[José María Juan]
Si quiero imprimir un valor específico le pasamos la posición en el array,
recuerda que la primera posición es 0, luego 1, etc. Ejemplo:
package main
import "fmt"
func main () {
var personas = [3] string {"José", "María", "Juan"}
fmt.Println(personas[0])
fmt.Println(personas[1])
fmt.Println(personas[2])
}
Lo anteior nos imprime:
José
María
Juan
Método len() para contar los elementos de un array:
var personas = [3] string {"José", "María", "Juan"}
fmt.Println(len(personas))
Esto imprime 3
Bucle FOR
=========
Nos permite iterar o recorrer los elementos de un array o lista, es decir
ejecutar un bloque de código tantas veces como sea necesario mientras se cumpla
una condición.
Un bucle for tiene tres partes: el inicializador, la condición y el modificador.
-Para el inicializador creamos la variable contador que tenga el valor de 0,
ejemplo:
contador :=0
-Para la condición, mientras que contador sea menor que la cantidad de elementos
del array, len(personas) voy a seguir iterando el código interno del for:
contador < len(personas)
-Para el modificador, con cada ejecución voy a incrementar el valor de contador,
ejemplo:
contador++
Ejemplo completo:
package main
import "fmt"
func main () {
var personas = [3] string {"José", "María", "Juan"}
for contador :=0; contador < len(personas); contador++ {
fmt.Println("Hola")
}
}
Lo anteior nos imprime:
Hola
Hola
Hola
3 veces porque es la cantidad de elementos del arreglo
Ahora vamos a mostrar cada nombre según la posición:
package main
import "fmt"
func main () {
var personas = [3] string {"José", "María", "Juan"}
for contador :=0; contador < len(personas); contador++ {
fmt.Println("El nombre es: ", personas[contador])
}
}
Esto imprime:
El nombre es: José
El nombre es: María
El nombre es: Juan
Fuentes
=======
https://keepcoding.io/blog/lenguaje-de-programacion-go-caracteristicas/
https://www.youtube.com/watch?v=p3xPUO_Z_hs