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 (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 2015Isela Guerrero Pacheco
 
Citomorfologia
CitomorfologiaCitomorfologia
CitomorfologiaL R
 
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 2015Isela 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-chipionaEve Sepúlveda
 
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...SPC Brasil
 
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 2015Isela Guerrero Pacheco
 
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
 
Indicadores de cortes de Novembro - 2013
Indicadores de cortes de Novembro - 2013Indicadores de cortes de Novembro - 2013
Indicadores de cortes de Novembro - 2013SPC Brasil
 
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íguezJuan 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

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 Chack3 Org
 
Por que java
Por que javaPor que java
Por que javareivax
 
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 cFree Lancer
 
Conociendo los Lenguajes de Programacion
Conociendo los Lenguajes de ProgramacionConociendo los Lenguajes de Programacion
Conociendo los Lenguajes de Programacionsandra gutierrez
 
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 Vladimir Pomares
 
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 webParadigma Digital
 
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 grailsFátima Casaú Pérez
 
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)Pablo Haya
 
Mprogintc++ regular
Mprogintc++ regularMprogintc++ regular
Mprogintc++ regularpayasito1980
 

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
 
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
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
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é

Creando Aplicaciones para Android con Kivy
Creando Aplicaciones para Android con KivyCreando Aplicaciones para Android con Kivy
Creando Aplicaciones para Android con KivyNahuel Defossé
 
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 2012Nahuel Defossé
 
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 2012Nahuel Defossé
 
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 2012Nahuel Defossé
 
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 2012Nahuel Defossé
 
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 HTML5Nahuel Defossé
 

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

RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 

Último (20)

RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.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