Slide 1

Slide 1 text

El lenguaje Go para gestión de infraestructura Usando el código para la administración de tecnología

Slide 2

Slide 2 text

Introducción • Creadores • Robert Griesemer: investigador de Google. Trabajó en el motor V8 para Javascript • Rob Pike: miembro del equipo de Unix • Ken Thompson: diseñador de Unix e inventor de B, predecesor de C

Slide 3

Slide 3 text

Descripción general de Go

Slide 4

Slide 4 text

Filosofía de diseño • Ejecutar todo con una herramienta: go • Orientado a la composición • Incluir paquetes dinámicamente desde un repositorio • Manejar la concurrencia desde primitivas • Producir ejecutables para cada plataforma

Slide 5

Slide 5 text

Espacios de nombres • Estructura predefinida definida por $GOPATH • src • pkg • bin • Importa y exporta símbolos • Agrega otro nivel de encapsulamiento con internal

Slide 6

Slide 6 text

Tipos básicos • Lenguaje con tipos estáticos simples y compuestos. • Manejo del Unicode a través de runas Categoría Tipos Cadena string Booleano bool Entero int, int8, int16, int32 e int64 Entero sin signo uint, uint8, uint16, uint32 y uint64 Puntero a entero uinptr Puntero a punto flotante float32 y float64 Número complejo complex64 y complex128 Tipo Descripción Ejemplo Puntero La dirección en la memoria de una variable. *int Formación Un contenedor del elemento del mismo tipo con una longitud fija. [2]int Fragmento Segmento contiguo de una matriz []int Mapa Diccionario o matriz asociativa map[int]int Estructura Una colección de campos que pueden tener diferentes tipos. struct{ value int } Función Un conjunto de funciones con los mismos parámetros y resultados. func(int, int) int Canal Tuberías de tipo que se utilizan para la comunicación de elementos del mismo tipo. chan int Interfaz Una colección específica de métodos, con un valor subyacente que los respalde interface{}

Slide 7

Slide 7 text

Tipos definidos a medida • Simples type Mensaje string // cadena personalizada type Contador int // entero personalizado type Num float32 // flotante personalizado type Exitoso bool // boolean personalizado • Compuestos type DosCadenas [2]string // matriz personalizada type Novedades chan string // canal personalizado type Totales map[string]int // mapa personalizado type IntPtr *int // puntero personalizado type Transformar func(string) string // función personalizada type Resultado struct { // estructura personalizada A, B int }

Slide 8

Slide 8 text

Tipo interfaz • Las definiciones de interfaz se pueden definir especificando una serie de métodos diferentes type Reader interface { Read(p []byte) (n int, err error) } • Además, se pueden componer type ReadCloser interface { Reader Closer }

Slide 9

Slide 9 text

Control de flujo • Condicionales: • If • Switch • Ciclos • for

Slide 10

Slide 10 text

Funciones y métodos • La novedad, pueden retornar más de un valor func simpleFunc() func funcReturn() (a, b int) func funcArgs(a, b int) func funcArgsReturns(a, b int) error • Existen funciones anónimas llamadas clausuras 1_anonima

Slide 11

Slide 11 text

Manejo de recursos • Diferir • Gestión de errores recuperables • Pánicos o errores no recuperables 2_diferir_seguimiento 3_panico_recuperacion

Slide 12

Slide 12 text

Concurrencia • Canales • Goroutines • Gestión de memoria y GC 4_gorutina 5_canal

Slide 13

Slide 13 text

Go y el sistema de archivos

Slide 14

Slide 14 text

Acceso al sistema de archivos • Manipulación de ruta de archivo • Directorio de trabajo • Manipulación de la ruta • Lectura de archivos • Interfaz Reader • Búfers • Cierre y posicionamiento • Escribir archivos • Escritura eficiente combinada con liberación de recursos diferida 6_directorio_de_trabajo 7_bufer_formato

Slide 15

Slide 15 text

Go y las corrientes (streams) del sistema

Slide 16

Slide 16 text

Manejo de las corrientes (streams) • Uso de interfaces para lectura y escritura • Copia de una corriente a otra • Lectores y escritores conectados 8_lector_runas 9_muchos_escritores

Slide 17

Slide 17 text

Terminales

Slide 18

Slide 18 text

Terminales • Uso de terminales • Creación de Pseudo Terminales 10_entrada_consola_simple

Slide 19

Slide 19 text

Procesos y demonios

Slide 20

Slide 20 text

Procesos • Proceso actual • os.Getpid() y os.Getppid() • ID de usuario y grupo • os.Getuid() y os.Getgid() • Directorio de trabajo • Procesos hijos 11_comando_simple type Cmd struct { Path string // comando a ejecutar. Args []string // argumentos de línea de comando (incluido el comando) Env []string // entorno del proceso Dir string // directorio de trabajo Stdin io.Reader // entrada estándar Stdout io.Writer // salida estándar Stderr io.Writer // error estándar ExtraFiles []*os.File // archivos abiertos adicionales SysProcAttr *syscall.SysProcAttr // atributos específicos del os Process *os.Process // proceso subyacente ProcessState *os.ProcessState // información sobre el estado del proceso }

Slide 21

Slide 21 text

Demonios • Soporte del sistema operativo • Ejecución • Servicios 12_demonio

Slide 22

Slide 22 text

Conclusiones