Оглавление
Mario Macías Lloret. Programación en Go
TABLA DE CONTENIDO
INTRODUCCIÓN
ACERCA DE ESTE LIBRO
ORGANIZACIÓN DEL LIBRO
CONVENCIONES DE FORMATO
ACERCA DEL AUTOR
Capítulo 1. INSTALACIÓN Y USO DE GO. 1.1 INSTALANDO GO
1.2 COMANDOS BÁSICOS DE GO
1.3 EDITANDO SU CÓDIGO EN GO
1.4 COMPILANDO Y EJECUTANDO SU PRIMER PROGRAMA
Capítulo 2. SINTAXIS BÁSICA DE GO
2.1 TIPOS DE DATOS BÁSICOS
2.2 CADENAS DE TEXTO. EL TIPO string
2.3 DEFINICIÓN DE VARIABLES
2.4 CONVERSIONES EXPLÍCITAS DE TIPOS
2.5 CONSTANTES
2.6 BASES DE NUMERACIÓN
2.7 OPERADORES NUMÉRICOS
2.8 OPERADORES NUMÉRICOS DE COMPARACIÓN
2.9 OPERADORES APLICABLES AL TIPO string
2.10 OPERADORES LÓGICOS CON bool
2.11 OPERADORES LÓGICOS A NIVEL DE BIT
2.12 SALIDA ESTÁNDAR DE DATOS
2.13 ENTRADA ESTÁNDAR DE DATOS
Capítulo 3. CONTROL DE FLUJO
3.1 BLOQUES CONDICIONALES. 3.1.1 if
3.1.2 if ... else
3.1.3 switch - case
3.2 ÓRDENES ITERATIVAS (BUCLES for)
3.3 CONTEXTO Y OCULTACIÓN DE VARIABLES
Capítulo 4. APUNTADORES
4.1 DEFINICIÓN DE UN APUNTADOR
4.2 LA REFERENCIA A nil
4.3 APUNTANDO HACIA UNA VARIABLE
4.4 LEYENDO O MODIFICANDO EL VALOR APUNTADO
4.5 VALORES VERSUS REFERENCIAS
Capítulo 5. FUNCIONES
5.1 DEFINICIÓN E INVOCACIÓN
5.2 RETORNO DE VALORES
5.3 RETORNO DE MÚLTIPLES VALORES
5.4 RETORNO DE MÚLTIPLES VALORES NOMBRADOS
5.5 EL IDENTIFICADOR VACÍO
5.6 PASO POR VALOR VS. PASO POR REFERENCIA
5.7 LITERALES DE FUNCIÓN
5.8 OTRAS CONSIDERACIONES
Capítulo 6. ESTRUCTURAS DE DATOS LINEALES
6.1 VECTORES
6.2 PORCIONES
6.3 DECLARANDO VARIABLES A PORCIONES
6.4 AÑADIR ELEMENTOS A UNA PORCIÓN. FUNCIÓN append
6.5 MEDIR DIMENSIONES CON len Y cap
6.6 CONTROLAR EL TAMAÑO INICIAL CON make
6.7 COPIA DE PORCIONES CON copy
6.8 USO DE PORCIONES EN FUNCIONES
6.9 RECORRIENDO VECTORES Y PORCIONES
6.10 CREANDO “VISTAS” DESDE LAS PORCIONES
6.11 FUNCIONES CON NÚMERO VARIABLE DE ARGUMENTOS
6.12 EL OPERADOR DIFUSOR
Capítulo 7. CADENAS DE TEXTO
7.1 DIFERENCIAS CON PORCIONES Y VECTORES
7.2 OBTENIENDO LA LONGITUD DE UN string
7.3 DE string A PORCIÓN
7.4 CONSTRUCCIÓN DINÁMICA DE CADENAS
7.4.1 Concatenación de cadenas
7.4.2 Construcción con strings.Builder
7.4.3 Paquete fmt
Capítulo 8. DICCIONARIOS (MAPAS)
8.1 DECLARACIÓN DE MAPAS
8.2 ACCESO A ELEMENTOS
8.3 ELIMINANDO ENTRADAS CON delete
8.4 RECORRIENDO MAPAS CON range
8.5 CONTANDO EL NÚMERO DE ELEMENTOS
8.6 CONJUNTOS
8.7 DETALLES INTERNOS DE map
Capítulo 9. ORGANIZACIÓN DE CÓDIGO PAQUETES Y MÓDULOS. 9.1 PAQUETES (package)
9.2 MÓDULOS
9.3 CREANDO MÓDULOS Y PAQUETES
9.4 IMPORTANDO PAQUETES DEL MÓDULO LOCAL
9.4.1 Dependencias circulares
9.5 INCORPORANDO PAQUETES DE MÓDULOS EXTERNOS
9.6 COPIAS LOCALES DE MÓDULOS. EL DIRECTORIO vendor
9.7 ELEMENTOS PÚBLICOS Y PRIVADOS A NIVEL DE PAQUETE
9.8 ALIAS DE PAQUETE
9.9 LA FUNCIÓN init
Capítulo 10. DEFINICIÓN DE TIPOS DE DATOS
10.1 TIPOS A PARTIR DE PORCIONES
10.2 TIPOS A PARTIR DE MAPAS
10.3 TIPOS FUNCIONALES
10.4 RECEPTORES DE FUNCIÓN. MÉTODOS
10.5 TIPOS PSEUDOENUMERADOS
10.5.1 El operador iota
10.6 CASO DE ESTUDIO: time.Duration
Capítulo 11. TIPOS DE DATOS ESTRUCTURADOS Struct. 11.1 TIPOS DE DATOS ESTRUCTURADOS: struct
11.2 PUNTEROS A struct
11.3 RECEPTORES DE FUNCIÓN Y CREACIÓN DE MÉTODOS
11.4 INCRUSTADO DE ESTRUCTURAS
11.5 LA ESTRUCTURA VACÍA: struct{}
11.6 CASO PRÁCTICO: OPCIONES FUNCIONALES COMO ALTERNATIVA A CONSTRUCTORES
Capítulo 12. INTERFACES
12.1 CASO DE ESTUDIO: LA INTERFAZ Stringer
12.2 LA FILOSOFÍA DEL TIPADO ESTRUCTURAL
12.3 IMPLEMENTANDO INTERFACES: RECEPTORES ¿MEDIANTE APUNTADORES O MEDIANTE VALORES?
12.4 LA INTERFAZ VACÍA interface{}
12.5 MANEJO SEGURO DE TIPOS DE DATOS
12.6 INCRUSTANDO INTERFACES
Capítulo 13. GESTIÓN DE ERRORES. 13.1 LA INTERFAZ error
13.2 INSTANCIANDO ERRORES DE MANERA GENÉRICA
13.3 COMPROBACIÓN DE TIPOS DE ERROR
13.3.1 Errores centinela
13.3.2 Distintas implementaciones de error
13.4 ENVOLVIENDO ERRORES
13.5 VERIFICANDO LA CADENA DE ERRORES: errors.As
13.6 defer
13.7 ENTRANDO EN PÁNICO
13.8 FUNCIÓN panic
13.9 FUNCIÓN recover
Capítulo 14. ENTRADA Y SALIDA FLUJOS DE DATOS
14.1 INTERFACES io.Writer E io.Reader
14.2 ARCHIVOS DE DISCO
14.3 ENTRADA Y SALIDA FORMATEADA
14.4 PAQUETE bufio
14.5 PAQUETE ioutil
Capítulo 15. PARALELISMO Y CONCURRENCIA GORRUTINAS
15.1 UN POCO DE HISTORIA
15.2 GORRUTINAS
15.3 SINCRONIZACIÓN MEDIANTE sync.WaitGroup
15.4 PROBLEMAS DE CONCURRENCIA: CONDICIONES DE CARRERA
15.5 SINCRONIZACIÓN MEDIANTE sync.Mutex
15.5.1 sync.RWMutex
15.6 SINCRONIZACIÓN MEDIANTE atomic
15.7 CONCLUSIONES: ¿CUÁNDO Y CÓMO SINCRONIZAR GORRUTINAS?
Capítulo 16. CANALES
16.1 CREACIÓN, USO Y CIERRE
16.2 CANALES SOLO DE LECTURA Y DE ESCRITURA
16.3 BLOQUEO EN LA ESCRITURA: CANALES CON O SIN BÚFER
16.4 ITERANDO CANALES CON for
16.5 MÚLTIPLES RECEPTORES
16.6 SINCRONIZACIÓN MEDIANTE CANALES
16.7 DEMULTIPLEXIÓN CON select
16.8 CANCELANDO LECTURAS DESPUÉS DE UN TIEMPO DE ESPERA
16.9 CANCELANDO TAREAS MEDIANTE CONTEXTOS
Capítulo 17. SERVICIOS WEB
17.1 HTTP EXPLICADO EN 3 MINUTOS
17.2 REST EXPLICADO EN 3 MINUTOS
17.3 CREACIÓN DE UN SERVICIO HTTP EN GO
17.3.1 Interfaz http.Handler
17.3.2 Funciones http.ListenAndServe y http.ListenAndServeTLS
17.3.3 Ejemplo de servidor HTTP
17.4 CREACIÓN DE UN CLIENTE HTTP EN GO
17.4.1 Ejemplo de cliente HTTP
17.5 EJEMPLO PRÁCTICO DE SERVICIO REST
17.5.1 Probando el servicio REST
Capítulo 18. SERIALIZACIÓN DE DATOS
18.1 SERIALIZACIÓN DE TIPOS GO A JSON
18.2 DESERIALIZACIÓN DE JSON A TIPOS GO
18.3 SERIALIZANDO Y DESERIALIZANDO DOCUMENTOS JSON SIN FORMATO
18.4 SERIALIZACIÓN DE PORCIONES Y ARRAYS
18.5 SERIALIZACIÓN Y DESERIALIZACIÓN EN OTROS FORMATOS
Capítulo 19. CONEXIÓN A BASES DE DATOS SQL
19.1 CARGA DE CONTROLADOR
19.2 ABRIENDO UNA BASE DE DATOS
19.3 MODIFICANDO LA BASE DE DATOS
19.4 CONSULTANDO DATOS
19.5 DECLARACIONES PREPARADAS
19.6 TRANSACCIONES
19.7 RESERVA DE CONEXIONES
Capítulo 20. PRUEBAS AUTOMATIZADAS DE SOFTWARE
20.1 CÓDIGO A PROBAR: LA FUNCIÓN FACTORIAL
20.2 EL PAQUETE testing
20.3 PROBANDO SERVICIOS HTTP
20.4 PRUEBAS DE RENDIMIENTO
20.5 COBERTURA DE LAS PRUEBAS