Actualizado el 21 de Marzo del 2018 (Publicado el 27 de Febrero del 2018)
1.899 visualizaciones desde el 27 de Febrero del 2018
364,3 KB
96 paginas
Creado hace 14a (22/03/2010)
Curso de Go
Roberto Costumero Moreno
ACM Cap´ıtulo de Estudiantes
Facultad de Inform´atica, UPM
Abril 2010
Curso de Go
El logotipo de Go y la informaci´on correspondiente al presente manual ha sido obtenida,
recopilada y modificada adecuadamente de la p´agina oficial de Go, http://golang.org.
El logotipo de Go y la informaci´on referente al lenguaje est´an licenciadas por GoogleTM
bajo una Licencia Reconocimiento 3.0 de Creative Commons y puede consultarse en la si-
guiente direcci´on: http://creativecommons.org/licenses/by/3.0/es/. El uso del logotipo y de la
informaci´on est´an autorizados por la presente licencia mencionando su correcta atribuci´on.
2010 ACM Cap´ıtulo de Estudiantes - Facultad de Inform´atica UPM
ACM Cap´ıtulo de Estudiantes
Facultad de Inform´atica - Universidad Polit´ecnica de Madrid
Campus de Montegancedo s/n
28660 Boadilla del Monte
MADRID (ESPA ˜NA)
Esta obra puede ser distribuida ´unicamente bajo los t´erminos y condiciones expuestos en la
Licencia Reconocimiento-No Comercial-Compartir bajo la misma licencia 3.0 Espa˜na de
Creative Commons o superior (puede consultarla en http://creativecommons.org/licenses/by-
nc-sa/3.0/es/).
ACM Cap´ıtulo de Estudiantes - Facultad de Inform´atica UPM no se responsabiliza de las
opiniones aqu´ı vertidas por el autor.
Gracias a todos mis amigos y compa˜neros de ACM
por todo el apoyo y la ayuda que han prestado
para que este manual pudiera ser publicado.
´Indice general
1. Introducci´on
.
.
.
.
.
.
.
.
. .
. .
.
.
1.1. ¿Qu´e es Go? .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .
1.2. ¿Qui´en lo desarrolla? .
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. ¿Por qu´e crear un nuevo lenguaje? . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4. Recursos .
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1. golang.org .
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.2. #go-nuts
.
. . . . . . . . . . . . . . . . . . . . . . . . .
1.4.3. Lista de correo Go Nuts
1.4.4. Gestor de errores .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.5. http://go-lang.cat-v.org/ . . . . . . . . . . . . . . . . . . . . . . . . . .
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
. .
. .
.
.
.
.
. .
1.8. Manteni´endose al d´ıa .
1.5. ¿C´omo instalarlo? .
. .
1.6. Compilando . .
. .
1.6.1. gccgo .
1.6.2. 6g/8g .
. .
1.7. Otras herramientas
.
.
. .
1.7.1. Godoc .
1.7.2. Gofmt .
2. Caracter´ısticas y tipos b´asicos
.
.
.
.
.
. .
. .
.
.
.
.
. .
.
.
2.1. Nuestro primer programa: Hello World!
2.2. Garbage Collector .
.
2.3. Las bases del lenguaje
.
2.4. Comentarios . .
2.5. Literales .
.
.
2.6. Vistazo r´apido de la sintaxis
2.7. Tipos
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .
. .
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .
. .
2.8.1. Diferencias con C . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8.2. Ejemplos .
2.9. Conversiones
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.10. Valores constantes y n´umeros ideales . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11. Declaraciones . .
. .
2.7.1. N´umeros
2.7.2. Bool .
.
2.7.3. String .
. .
2.8. Operadores
. .
.
. .
.
.
.
.
.
.
.
8
8
9
9
9
9
10
10
10
10
10
12
12
12
13
14
14
14
16
16
16
16
17
17
18
19
19
20
20
21
21
21
22
22
23
4
Curso de Go
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.1. Variables
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.2. Constantes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.3. Tipos . .
2.11.4. Operador new vs. funci´on make . . . . . . . . . . . . . . . . . . . . .
2.11.5. Asignaciones . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
. .
.
.
.
.
. .
.
3. Estructuras de control
.
. .
. .
3.1. Sentencia condicional: if
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Sentencia condicional: switch . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. Bucles: for .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instrucciones break y continue . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.
.
3.5. Funciones .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .
3.6. ¿Y qu´e hay del 0? .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7. Defer
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8. Funciones an´onimas, λ-programaci´on y closures . . . . . . . . . . . . . . . . .
.
.
. .
.
.
. .
.
.
.
.
.
.
.
.
.
4. Estructuraci´on de programas
.
´Ambito de una variable .
Inicializaci´on .
.
.
.
.
.
. .
.
.
4.1. Paquetes y estructura de los ficheros fuente
4.2.
4.3.
.
4.4. Testing .
4.5. Librer´ıas .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1. Fmt
4.5.2. Os .
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.3. Os - Entrada/salida en ficheros . . . . . . . . . . . . . . . . . . . . . .
4.5.4. Otras librer´ıas .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
5. Tipos de datos compuestos
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1. Arrays .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
5.2. Slices
5.3. Maps
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
Indexando un map . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1.
5.3.2. Comprobando la existencia de una clave . . . . . . . . . . . . . . . . .
5.3.3. Borrando una entrada . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.4. Bucle for y range . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1. Exportaci´on de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.2. Atributos an´onimos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.3. Conflictos .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4. Structs .
.
.
.
.
.
.
.
.
.
.
.
.
.
6. Orientaci´on a Objetos
.
6.1. M´etodos .
.
.
.
. .
. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1. M´etodos para structs . . . . . . . . . . . . . . . . . . . . . . . . . . .
Invocaci´on de m´etodos . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.
6.1.3. Reglas para el uso de m´etodos . . . . . . . . . . . . . . . . . . . . . .
6.1.4. Punteros y valores en los m´etodos . . . . . . . . . . . . . . . . . . . .
6.1.5. Atributos an´onimos en los m´etodos
. . . . . . . . . . . . . . . . . . .
24
25
26
26
27
28
28
29
30
31
31
32
33
35
38
38
39
39
40
41
41
45
47
51
52
52
54
56
57
57
57
58
58
59
60
61
62
62
62
63
63
63
64
ACM Cap´ıtulo de estudiantes
5
FI - UPM
Curso de Go
6.2.
.
.
.
.
.
.
.
.
6.1.6. M´etodos con otros tipos
. . . . . . . . . . . . . . . . . . . . . . . . .
6.1.7. El m´etodo String()
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.8. Visibilidad de atributos y m´etodos . . . . . . . . . . . . . . . . . . . .
Interfaces .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introducci´on sobre interfaces . . . . . . . . . . . . . . . . . . . . . . .
6.2.1.
6.2.2. Definici´on de interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.3. El tipo interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.4. El valor interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.5. Hechos de los interfaces . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.6. Ejemplo: io.Writer
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.7. Comparaci´on con C++ . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.8. Contenedores y la interfaz vac´ıa . . . . . . . . . . . . . . . . . . . . .
6.2.9. Asertos de tipos .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.10. Conversi´on de una interfaz a otra . . . . . . . . . . . . . . . . . . . . .
6.2.11. Probando interfaces con asertos
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.12. El paquete reflect .
.
7. Concurrencia y comunicaci´on
.
.
7.1. Goroutines .
.
.
.
.
.
.
.
. .
. .
.
.
. .
.
7.2. Channels
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
7.1.1. Definici´on .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.2. C´omo crear una Goroutine . . . . . . . . . . . . . . . . . . . . . . . .
7.1.3. Verdades delas Goroutines . . . . . . . . . . . . . . . . . . . . . . . .
Comentarios de: Curso de Go (0)
No hay comentarios