SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
El lenguaje de programaci´n Go
                         o
Introducci´n a la Concurrencia
           o
        UNPSJB - 2012




         Defoss´ Nahuel
               e


      5 de noviembre de 2012
Introducci´n
          o
Estructura del lenguaje
Instalaci´n
         o
Herramientas
Hola Mundo
Algunas caractrer´
                 ısticas
Primitivas de Concurrencia
   Gorutinas
   Canales
   Select
   Grupos de espera
   Futures
   Diferidos
M´s informaci´n
 a           o
Introducci´n
          o

      Google cre´ el lenguaje de programaci´n Go debido a
                o                          o
      que:
          La capacidad de los procesadores crecieron
          enormemente, pero el software no se ejecuta m´s r´pido.
                                                         a a
          El manejo de dependecias de C es arcaico
          La fuga de los programadores de lenguajes est´ticos
                                                        a
          tipados como C++ o Java hacia los din´micos como
                                                  a
          Python o JavaScript.
          Caracter´ısticas como garbage collection y
          computaci´n paralela est´n ausentes en los lenguajes de
                     o             a
          programaci´n de sistemas.
                       o
          La aprici´n de muchos cores gener´ preocupaci´n y
                   o                        o            o
          confusi´n.
                 o
Estructura del lenguaje
  Go es un lenguaje de programaci´n compilado desarrollado por
                                  o
  Google orientado a la concurrencia.
      Su sintaxis est´ basada en C, con algunas siplificaciones:
                     a
           Todo programa en Go comienzan los la cl´usula package
                                                     a
           No se utilizan los ; (punto y coma) para separar
           sentencias
           Las cl´usulas de condici´n no llevan par´ntesis
                 a                  o              e
           Las variables se definen con la cl´usula var y el tipo doc
                                            a
           se ubica despu´s de la variable (Ej: var entero int).
                          e
           Las funciones se definen con func y su tipo se define
           despu´s de sus argumentos doc
                 e
           Tiene tipos de dato int, complex, float, uint y las
           constes true, false y nil. doc
           Existe la clausula const para reemplazar los #define
Algunas diferencias con C

       Permite return con varios valores, generalmente usado
       para indicar errores y valores de retorno.
             func x() {
                  return "", nil
             }
       Se pueden definir variables de manera autom´tica
                                                   a
       utilizando el operador :=
                  a := 3 // En vez de var a int; a = 3
       Los arreglos llevan el tama˜o al princpio
                                   n
   1         var arreglo [3] int [1 2 3]
   2         arreglo2 := [...]string{"Hola", "mundo", "Go!"}
Algunas diferencias con C cont.




        Existe la cl´usula range que nos permite recorrer arreglos
                    a
        o cadenas de manera sencilla.
    1         for pos, char := range "abcd" {
    2           fmt.Printf("Caracter %c empieza en la pos %dn", char, pos)
    3         }
Para instalar Go en Ubuntu Wiki de Ubuntu
     $ sudo add-apt-repository ppa:gophers/go
     $ sudo apt-get update
     $ sudo apt-get install golang-stable
Para instalaci´n en windows
              o
Descargar del Sitio Oficial y descomprimir en C: go y
agregar esa ruta a GOROOT y c: go bin a PATH
Compilaci´n en Go
         o



  Los archivos fuentes de go tiene la extensi´n .go y se corren
                                             o
  con la siguiente linea
  $ go run miprograma.go
  Para compilar el archivo para su distribuci´n se utiliza
                                             o
  compile
  $ go build miprograma.go
Mi primer programa en Go

  // Mi primer programa en go

  package main

  import "fmt"

  func main() {

      fmt.Printf("Hola mundo")
  }
  src
Algunas sentencias


    1. Las sentencias if se escriben como:
            a := 1 // Asignacio’n con autotipo
            if a > 3 {
                 fmt.Printf("a es mayor a 3")
            }
    2. La sentencia for se puede escribir como
                 for i:=0; i<10;i++{
                      fmt.Printf("i = %d", i)
                 }
Mapa
     Un mapa es una asociaci´n clave valor.
                            o
 1   // testgo project main.go
 2   package main
 3
 4   import (
 5   "fmt"
 6   )
 7
 8   func main() {
 9
10       mapa := make(map[string]int)
11       cadenas := []string{"uno", "dos", "tres", "dos", "cuatro"}
12       for _, cadena := range cadenas{
13           if _, ok := mapa[cadena]; ok {
14               //fmt.Printf("Ya existen")
15               mapa[cadena] += 1
16           } else {
17               //fmt.Printf("No existen")
18               mapa[cadena] = 1
19           }
20       }
21       for k, v := range mapa {
22           fmt.Printf("La cadena %-10s se encontro %d vecesn", k, v)
23       }
24   }
Gorutinas
  Una gorutina es una funci´n (o sentencia) que se ejecuta de
                             o
  manera concurrente y comparten el mismo espacio de
  direcciones. Si es posible se traduce en un hilo del sistema
  operativo.
  package main
  import "fmt"
  func f(id int){
       fmt.Printf("Soy la gorutina %d", id)
  }
  func main(){
       for i:=0; i < 10, i++ {
             go f()
       }
  }
Channel


  Los canales son similares a las colas de mensaes y permiten la
  comunicaci´n entre c´digo concurrentes.
              o        o
  Se crean con la sentencia make y tienen un tipo de datos
  espec´ıfico.
  La sintaxis es muy sencilla:
       canal <- "Hola mundo" // Poner en el canal
       a <- canal // Tomar del canal
Productor Consumidor con Gorutinas y Channels
 1   package main;
 2   import ("fmt"; "time"; "math/rand")
 3
 4   var canal = make(chan int)
 5   //var listo = make(chan bool, 1)
 6
 7   func prod(){
 8       for i:=0; i<100; i++{
 9           // Producir un item
10           canal <- rand.Int() // Entero aleatorio
11       }
12
13   }
14   func cons(){
15      cantidad := 1
16      for {
17         entero := <-canal
18         fmt.Printf("Recibi %.2d %dn", cantidad, entero)
19         cantidad++
20      }
21
22   }
23   func main(){
24       go prod()
25       go cons()
Select

     Select es similar a la cl´usula switch pero permite hacer
                              a
     polling sobre varios canales de comunicaci´n.
                                               o
 1         var c, c1, c2, c3 chan int
 2         var i1, i2 int
 3         select {
 4         case i1 = <-c1:
 5          print("received ", i1, " from c1n")
 6         case c2 <- i2:
 7          print("sent ", i2, " to c2n")
 8         case i3, ok := (<-c3): // same as: i3, ok := <-c3
 9          if ok {
10          print("received ", i3, " from c3n")
11          } else {
12          print("c3 is closedn")
13          }
14         default:
15          print("no communicationn")
16         }
Locks



  Dentro del pauete ‘‘sync’’ se encuentra una colecci´n de
                                                      o
  funciones de bloqueo.
            func (*Mutex) Lock
            func (*Mutex) Unlock
  Est´n implementadas con channels y se limitan a trabajo con
     a
  recursos compartidos.
WaitGroups


  Los grupos de espera son un conjunto de gorutinas que se
  deben esperar para poder continuar con la ejecuci´n. Est´n en
                                                   o      a
  el paquete sync.
   var grupo sync.WaitGroups
   grupo.Add(1) // Agrega una gorutina
   grupo.Done() // Termina una rutina
   grupo.Wait() // Espera a que todas hallan hecho Done
  Ver c´dgo
       o
Futures


    Un future es la promesa de un c´lculo que se efectuar´ cu´ndo
                                    a                     a a
    sea necesario su resultado. Es una aplicaci´n de lo que se
                                               o
    conoce como evaluaci´n perezosa (lazy evaluation).
                           o
1   func InvertirMatrizFuture(mat Matrix){
2       future := make(chan Matrix) // Canal para recibir resultado
3       // Se lanza el c’alculo en una gorutina
4       go func () { future <- InvertirMatriz(mat)}
5       return future // Retornamos el canal
6   }
Futures Cont.



    Para poder utilizar los resultados generados por una promesa o
    future
1   func InverseProduct (a Matrix, b Matrix) {
2       a_inv_future := InvertirMatrizFuture(a);
3       b_inv_future := InvertirMatrizFuture(b);
4       a_inv := <-a_inv_future;
5       b_inv := <-b_inv_future;
6       return Product(a_inv, b_inv);
7   }
Diferidos
     Go permite programar la llamada a una funci´n cuando un
                                                 o
     bloque de funci´n termina mediante la cl´usula defer.
                    o                        a
 1   package main
 2   import "fmt"
 3
 4   func AlgoUtil(){
 5       fmt.Printf("2 Realizo algo util...n")
 6   }
 7
 8   func Funcion() int {
 9       defer fmt.Printf("1n")
10       defer AlgoUtil()
11       defer fmt.Printf("3n")
12       defer fmt.Printf("4n")
13       return 1
14   }
15
16   func main(){
17       fmt.Printf("Retorno: %dn", Funcion())
18   }
M´s informaci´n
 a           o




     P´gina de Go
      a
     Effective Go
     Especificaci´n del Lenguaje
                o
     Patrones de Concurrencia con Go

Más contenido relacionado

La actualidad más candente

Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
cemayoral
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 

La actualidad más candente (20)

Clase3_Python-CTIC
Clase3_Python-CTICClase3_Python-CTIC
Clase3_Python-CTIC
 
Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_
 
Elementos basicos c
Elementos basicos cElementos basicos c
Elementos basicos c
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
 
Clase1_Python-CTIC
Clase1_Python-CTICClase1_Python-CTIC
Clase1_Python-CTIC
 
Dev c++
Dev c++Dev c++
Dev c++
 
Lenguaje C_Curso Secap
Lenguaje C_Curso SecapLenguaje C_Curso Secap
Lenguaje C_Curso Secap
 
Comandos importantes en c++
Comandos importantes en c++Comandos importantes en c++
Comandos importantes en c++
 
Turbo c++
Turbo c++Turbo c++
Turbo c++
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Programa c++
Programa c++Programa c++
Programa c++
 
Lenguaje c ++ guía para programadores
Lenguaje c ++  guía para programadoresLenguaje c ++  guía para programadores
Lenguaje c ++ guía para programadores
 
C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
C++ y sus librerias
 
Funcion printf
Funcion printfFuncion printf
Funcion printf
 
Paralela10
Paralela10Paralela10
Paralela10
 
C++
C++C++
C++
 
Lenguaje de-programacion-c++
Lenguaje de-programacion-c++Lenguaje de-programacion-c++
Lenguaje de-programacion-c++
 
Sintaxis funciones c++
Sintaxis funciones c++Sintaxis funciones c++
Sintaxis funciones c++
 
Librerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación CLibrerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación C
 
Funciones en Lenguaje C
Funciones en Lenguaje CFunciones en Lenguaje C
Funciones en Lenguaje C
 

Destacado

Material huacho martes 17 de marzo del 2015
Material huacho martes 17 de marzo del 2015Material huacho martes 17 de marzo del 2015
Material huacho martes 17 de marzo del 2015
Isela Guerrero Pacheco
 
4 p-evaluacion-inicial-4º-completas-chipiona
4 p-evaluacion-inicial-4º-completas-chipiona4 p-evaluacion-inicial-4º-completas-chipiona
4 p-evaluacion-inicial-4º-completas-chipiona
Eve Sepúlveda
 
FOFITO. El humor que agita las conciencias. Por Juan Carlos Rodríguez. Fotos ...
FOFITO. El humor que agita las conciencias. Por Juan Carlos Rodríguez. Fotos ...FOFITO. El humor que agita las conciencias. Por Juan Carlos Rodríguez. Fotos ...
FOFITO. El humor que agita las conciencias. Por Juan Carlos Rodríguez. Fotos ...
Juan Carlos Rodríguez
 
HONESTIDAD RADICAL: Dile a tu jefe que es un tirano. Por Juan Carlos Rodríguez
HONESTIDAD RADICAL: Dile a tu jefe que es un tirano. Por Juan Carlos RodríguezHONESTIDAD RADICAL: Dile a tu jefe que es un tirano. Por Juan Carlos Rodríguez
HONESTIDAD RADICAL: Dile a tu jefe que es un tirano. Por Juan Carlos Rodríguez
Juan Carlos Rodríguez
 

Destacado (20)

Recursos hidricos
Recursos hidricosRecursos hidricos
Recursos hidricos
 
Material huacho martes 17 de marzo del 2015
Material huacho martes 17 de marzo del 2015Material huacho martes 17 de marzo del 2015
Material huacho martes 17 de marzo del 2015
 
Inty project
Inty projectInty project
Inty project
 
Citomorfologia
CitomorfologiaCitomorfologia
Citomorfologia
 
Empresa mechatronick
Empresa mechatronickEmpresa mechatronick
Empresa mechatronick
 
Simulacro tumbes con claves sabado 28 de marzo 2015
Simulacro tumbes con claves sabado 28 de marzo 2015Simulacro tumbes con claves sabado 28 de marzo 2015
Simulacro tumbes con claves sabado 28 de marzo 2015
 
4 p-evaluacion-inicial-4º-completas-chipiona
4 p-evaluacion-inicial-4º-completas-chipiona4 p-evaluacion-inicial-4º-completas-chipiona
4 p-evaluacion-inicial-4º-completas-chipiona
 
Aval 9ºano 2ºbimestre
Aval 9ºano 2ºbimestreAval 9ºano 2ºbimestre
Aval 9ºano 2ºbimestre
 
cargas elétricas
cargas elétricascargas elétricas
cargas elétricas
 
Sociedad del conocimiento
Sociedad del conocimientoSociedad del conocimiento
Sociedad del conocimiento
 
Brasileiros inadimplentes comprometem mais de sete vezes sua renda mensal com...
Brasileiros inadimplentes comprometem mais de sete vezes sua renda mensal com...Brasileiros inadimplentes comprometem mais de sete vezes sua renda mensal com...
Brasileiros inadimplentes comprometem mais de sete vezes sua renda mensal com...
 
Lucratividade 131118123751-phpapp01
Lucratividade 131118123751-phpapp01Lucratividade 131118123751-phpapp01
Lucratividade 131118123751-phpapp01
 
Apres rede la cle
Apres rede la cleApres rede la cle
Apres rede la cle
 
Que es un campo magnetico. segunda version
Que es un campo magnetico. segunda versionQue es un campo magnetico. segunda version
Que es un campo magnetico. segunda version
 
Actividad 1 word
Actividad 1 wordActividad 1 word
Actividad 1 word
 
Xiv material huacho barranca lunes 03 de agosto 2015
Xiv material huacho barranca lunes  03 de agosto 2015Xiv material huacho barranca lunes  03 de agosto 2015
Xiv material huacho barranca lunes 03 de agosto 2015
 
perdoar
perdoarperdoar
perdoar
 
FOFITO. El humor que agita las conciencias. Por Juan Carlos Rodríguez. Fotos ...
FOFITO. El humor que agita las conciencias. Por Juan Carlos Rodríguez. Fotos ...FOFITO. El humor que agita las conciencias. Por Juan Carlos Rodríguez. Fotos ...
FOFITO. El humor que agita las conciencias. Por Juan Carlos Rodríguez. Fotos ...
 
Indicadores de cortes de Novembro - 2013
Indicadores de cortes de Novembro - 2013Indicadores de cortes de Novembro - 2013
Indicadores de cortes de Novembro - 2013
 
HONESTIDAD RADICAL: Dile a tu jefe que es un tirano. Por Juan Carlos Rodríguez
HONESTIDAD RADICAL: Dile a tu jefe que es un tirano. Por Juan Carlos RodríguezHONESTIDAD RADICAL: Dile a tu jefe que es un tirano. Por Juan Carlos Rodríguez
HONESTIDAD RADICAL: Dile a tu jefe que es un tirano. Por Juan Carlos Rodríguez
 

Similar a Presnetación Go

Por que java
Por que javaPor que java
Por que java
reivax
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Fátima Casaú Pérez
 

Similar a Presnetación Go (20)

Ejercicios introduccion a la programación en C
Ejercicios  introduccion a la programación en CEjercicios  introduccion a la programación en C
Ejercicios introduccion a la programación en C
 
Ejercicios C
Ejercicios CEjercicios C
Ejercicios C
 
Por que java
Por que javaPor que java
Por que java
 
Introduccion a go
Introduccion a goIntroduccion a go
Introduccion a go
 
Revista digital
Revista digitalRevista digital
Revista digital
 
Manejo de memoria
Manejo de memoriaManejo de memoria
Manejo de memoria
 
Programación en c primer programa en c
Programación en c primer programa en cProgramación en c primer programa en c
Programación en c primer programa en c
 
Apun c
Apun cApun c
Apun c
 
Conociendo los Lenguajes de Programacion
Conociendo los Lenguajes de ProgramacionConociendo los Lenguajes de Programacion
Conociendo los Lenguajes de Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de Programacion
 
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
 
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones webGroovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
 
Tema 2 - Programación básica en C (III)
Tema 2  - Programación básica en C (III)Tema 2  - Programación básica en C (III)
Tema 2 - Programación básica en C (III)
 
mprogintc++.pdf
mprogintc++.pdfmprogintc++.pdf
mprogintc++.pdf
 
CURSO C ++ (1).pdf
CURSO C ++ (1).pdfCURSO C ++ (1).pdf
CURSO C ++ (1).pdf
 
CURSO C ++ (1).pdf
CURSO C ++ (1).pdfCURSO C ++ (1).pdf
CURSO C ++ (1).pdf
 
Mprogintc++ regular
Mprogintc++ regularMprogintc++ regular
Mprogintc++ regular
 
Mprogintc++
Mprogintc++Mprogintc++
Mprogintc++
 

Más de Nahuel Defossé (6)

Creando Aplicaciones para Android con Kivy
Creando Aplicaciones para Android con KivyCreando Aplicaciones para Android con Kivy
Creando Aplicaciones para Android con Kivy
 
Clase 4/4 Curso Introducción a Python 2012
Clase 4/4 Curso Introducción a Python 2012Clase 4/4 Curso Introducción a Python 2012
Clase 4/4 Curso Introducción a Python 2012
 
Clase 3/4 Curso Introducción a Python 2012
Clase 3/4 Curso Introducción a Python 2012Clase 3/4 Curso Introducción a Python 2012
Clase 3/4 Curso Introducción a Python 2012
 
Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012
 
Clase 1 Curso Introducción a Python 2012
Clase 1 Curso Introducción a Python 2012Clase 1 Curso Introducción a Python 2012
Clase 1 Curso Introducción a Python 2012
 
Creando un SCADA con Python y HTML5
Creando un SCADA con Python y HTML5Creando un SCADA con Python y HTML5
Creando un SCADA con Python y HTML5
 

Último

Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
jlorentemartos
 

Último (20)

Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
activ4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfactiv4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdf
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
Linea del tiempo - Filosofos Cristianos.docx
Linea del tiempo - Filosofos Cristianos.docxLinea del tiempo - Filosofos Cristianos.docx
Linea del tiempo - Filosofos Cristianos.docx
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdf
 
Usos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicasUsos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicas
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
Desarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por ValoresDesarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por Valores
 
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfPlan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
 
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
 
Posición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptxPosición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptx
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
Sesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdfSesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdf
 

Presnetación Go

  • 1. El lenguaje de programaci´n Go o Introducci´n a la Concurrencia o UNPSJB - 2012 Defoss´ Nahuel e 5 de noviembre de 2012
  • 2. Introducci´n o Estructura del lenguaje Instalaci´n o Herramientas Hola Mundo Algunas caractrer´ ısticas Primitivas de Concurrencia Gorutinas Canales Select Grupos de espera Futures Diferidos M´s informaci´n a o
  • 3. Introducci´n o Google cre´ el lenguaje de programaci´n Go debido a o o que: La capacidad de los procesadores crecieron enormemente, pero el software no se ejecuta m´s r´pido. a a El manejo de dependecias de C es arcaico La fuga de los programadores de lenguajes est´ticos a tipados como C++ o Java hacia los din´micos como a Python o JavaScript. Caracter´ısticas como garbage collection y computaci´n paralela est´n ausentes en los lenguajes de o a programaci´n de sistemas. o La aprici´n de muchos cores gener´ preocupaci´n y o o o confusi´n. o
  • 4. Estructura del lenguaje Go es un lenguaje de programaci´n compilado desarrollado por o Google orientado a la concurrencia. Su sintaxis est´ basada en C, con algunas siplificaciones: a Todo programa en Go comienzan los la cl´usula package a No se utilizan los ; (punto y coma) para separar sentencias Las cl´usulas de condici´n no llevan par´ntesis a o e Las variables se definen con la cl´usula var y el tipo doc a se ubica despu´s de la variable (Ej: var entero int). e Las funciones se definen con func y su tipo se define despu´s de sus argumentos doc e Tiene tipos de dato int, complex, float, uint y las constes true, false y nil. doc Existe la clausula const para reemplazar los #define
  • 5. Algunas diferencias con C Permite return con varios valores, generalmente usado para indicar errores y valores de retorno. func x() { return "", nil } Se pueden definir variables de manera autom´tica a utilizando el operador := a := 3 // En vez de var a int; a = 3 Los arreglos llevan el tama˜o al princpio n 1 var arreglo [3] int [1 2 3] 2 arreglo2 := [...]string{"Hola", "mundo", "Go!"}
  • 6. Algunas diferencias con C cont. Existe la cl´usula range que nos permite recorrer arreglos a o cadenas de manera sencilla. 1 for pos, char := range "abcd" { 2 fmt.Printf("Caracter %c empieza en la pos %dn", char, pos) 3 }
  • 7. Para instalar Go en Ubuntu Wiki de Ubuntu $ sudo add-apt-repository ppa:gophers/go $ sudo apt-get update $ sudo apt-get install golang-stable Para instalaci´n en windows o Descargar del Sitio Oficial y descomprimir en C: go y agregar esa ruta a GOROOT y c: go bin a PATH
  • 8. Compilaci´n en Go o Los archivos fuentes de go tiene la extensi´n .go y se corren o con la siguiente linea $ go run miprograma.go Para compilar el archivo para su distribuci´n se utiliza o compile $ go build miprograma.go
  • 9. Mi primer programa en Go // Mi primer programa en go package main import "fmt" func main() { fmt.Printf("Hola mundo") } src
  • 10. Algunas sentencias 1. Las sentencias if se escriben como: a := 1 // Asignacio’n con autotipo if a > 3 { fmt.Printf("a es mayor a 3") } 2. La sentencia for se puede escribir como for i:=0; i<10;i++{ fmt.Printf("i = %d", i) }
  • 11. Mapa Un mapa es una asociaci´n clave valor. o 1 // testgo project main.go 2 package main 3 4 import ( 5 "fmt" 6 ) 7 8 func main() { 9 10 mapa := make(map[string]int) 11 cadenas := []string{"uno", "dos", "tres", "dos", "cuatro"} 12 for _, cadena := range cadenas{ 13 if _, ok := mapa[cadena]; ok { 14 //fmt.Printf("Ya existen") 15 mapa[cadena] += 1 16 } else { 17 //fmt.Printf("No existen") 18 mapa[cadena] = 1 19 } 20 } 21 for k, v := range mapa { 22 fmt.Printf("La cadena %-10s se encontro %d vecesn", k, v) 23 } 24 }
  • 12. Gorutinas Una gorutina es una funci´n (o sentencia) que se ejecuta de o manera concurrente y comparten el mismo espacio de direcciones. Si es posible se traduce en un hilo del sistema operativo. package main import "fmt" func f(id int){ fmt.Printf("Soy la gorutina %d", id) } func main(){ for i:=0; i < 10, i++ { go f() } }
  • 13. Channel Los canales son similares a las colas de mensaes y permiten la comunicaci´n entre c´digo concurrentes. o o Se crean con la sentencia make y tienen un tipo de datos espec´ıfico. La sintaxis es muy sencilla: canal <- "Hola mundo" // Poner en el canal a <- canal // Tomar del canal
  • 14. Productor Consumidor con Gorutinas y Channels 1 package main; 2 import ("fmt"; "time"; "math/rand") 3 4 var canal = make(chan int) 5 //var listo = make(chan bool, 1) 6 7 func prod(){ 8 for i:=0; i<100; i++{ 9 // Producir un item 10 canal <- rand.Int() // Entero aleatorio 11 } 12 13 } 14 func cons(){ 15 cantidad := 1 16 for { 17 entero := <-canal 18 fmt.Printf("Recibi %.2d %dn", cantidad, entero) 19 cantidad++ 20 } 21 22 } 23 func main(){ 24 go prod() 25 go cons()
  • 15. Select Select es similar a la cl´usula switch pero permite hacer a polling sobre varios canales de comunicaci´n. o 1 var c, c1, c2, c3 chan int 2 var i1, i2 int 3 select { 4 case i1 = <-c1: 5 print("received ", i1, " from c1n") 6 case c2 <- i2: 7 print("sent ", i2, " to c2n") 8 case i3, ok := (<-c3): // same as: i3, ok := <-c3 9 if ok { 10 print("received ", i3, " from c3n") 11 } else { 12 print("c3 is closedn") 13 } 14 default: 15 print("no communicationn") 16 }
  • 16. Locks Dentro del pauete ‘‘sync’’ se encuentra una colecci´n de o funciones de bloqueo. func (*Mutex) Lock func (*Mutex) Unlock Est´n implementadas con channels y se limitan a trabajo con a recursos compartidos.
  • 17. WaitGroups Los grupos de espera son un conjunto de gorutinas que se deben esperar para poder continuar con la ejecuci´n. Est´n en o a el paquete sync. var grupo sync.WaitGroups grupo.Add(1) // Agrega una gorutina grupo.Done() // Termina una rutina grupo.Wait() // Espera a que todas hallan hecho Done Ver c´dgo o
  • 18. Futures Un future es la promesa de un c´lculo que se efectuar´ cu´ndo a a a sea necesario su resultado. Es una aplicaci´n de lo que se o conoce como evaluaci´n perezosa (lazy evaluation). o 1 func InvertirMatrizFuture(mat Matrix){ 2 future := make(chan Matrix) // Canal para recibir resultado 3 // Se lanza el c’alculo en una gorutina 4 go func () { future <- InvertirMatriz(mat)} 5 return future // Retornamos el canal 6 }
  • 19. Futures Cont. Para poder utilizar los resultados generados por una promesa o future 1 func InverseProduct (a Matrix, b Matrix) { 2 a_inv_future := InvertirMatrizFuture(a); 3 b_inv_future := InvertirMatrizFuture(b); 4 a_inv := <-a_inv_future; 5 b_inv := <-b_inv_future; 6 return Product(a_inv, b_inv); 7 }
  • 20. Diferidos Go permite programar la llamada a una funci´n cuando un o bloque de funci´n termina mediante la cl´usula defer. o a 1 package main 2 import "fmt" 3 4 func AlgoUtil(){ 5 fmt.Printf("2 Realizo algo util...n") 6 } 7 8 func Funcion() int { 9 defer fmt.Printf("1n") 10 defer AlgoUtil() 11 defer fmt.Printf("3n") 12 defer fmt.Printf("4n") 13 return 1 14 } 15 16 func main(){ 17 fmt.Printf("Retorno: %dn", Funcion()) 18 }
  • 21. M´s informaci´n a o P´gina de Go a Effective Go Especificaci´n del Lenguaje o Patrones de Concurrencia con Go