Métodos
10.6 Caso de estudio: time.Duration
CAPÍTULO 11. TIPOS DE DATOS ESTRUCTURADOS
11.1 Tipos de datos estructurados: 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
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
CAPÍTULO 13. GESTIÓN DE ERRORES
13.2 Instanciando errores de manera genérica
13.3 Comprobación de tipos de error
13.3.2 Distintas implementaciones de error
13.5 Verificando la cadena de errores: errors.As
14.1 Interfaces io.Writer e io.Reader
14.3 Entrada y salida formateada
CAPÍTULO 15. PARALELISMO Y CONCURRENCIA
15.3 Sincronización mediante sync.WaitGroup
15.4 Problemas de concurrencia: condiciones de carrera
15.5 Sincronización mediante sync.Mutex
15.6 Sincronización mediante atomic
15.7 Conclusiones: ¿cuándo y cómo sincronizar gorrutinas?
16.2 Canales solo de lectura y de escritura