Upgrade to Pro — share decks privately, control downloads, hide ads and more …

El lenguaje Go para gestión de infraestructura

Arqconf
February 13, 2020

El lenguaje Go para gestión de infraestructura

Arqconf

February 13, 2020
Tweet

More Decks by Arqconf

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. Espacios de nombres • Estructura predefinida definida por $GOPATH •

    src • pkg • bin • Importa y exporta símbolos • Agrega otro nivel de encapsulamiento con internal
  4. 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{}
  5. 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 }
  6. 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 }
  7. 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
  8. Manejo de recursos • Diferir • Gestión de errores recuperables

    • Pánicos o errores no recuperables 2_diferir_seguimiento 3_panico_recuperacion
  9. 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
  10. 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
  11. 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 }