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

Estrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxEstrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxdkmeza
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
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
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularMooPandrea
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
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
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxMaritzaRetamozoVera
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVGiustinoAdesso1
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 

Último (20)

Estrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxEstrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptx
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
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
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
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...
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docx
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCV
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 

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