El lenguaje de programaci´n Go oIntroducci´n a la Concurrencia o UNPSJB - 2012 ...
Introducci´n oEstructura del lenguajeInstalaci´n oHerramientasHola MundoAlgunas caractrer´ ...
Introducci´n o Google cre´ el lenguaje de programaci´n Go debido a o ...
Estructura del lenguaje Go es un lenguaje de programaci´n compilado desarrollado por o ...
Algunas diferencias con C Permite return con varios valores, generalmente usado para indicar errores y valores...
Algunas diferencias con C cont. Existe la cl´usula range que nos permite recorrer arreglos a ...
Para instalar Go en Ubuntu Wiki de Ubuntu $ sudo add-apt-repository ppa:gophers/go $ sudo apt-get update $ sud...
Compilaci´n en Go o Los archivos fuentes de go tiene la extensi´n .go y se corren ...
Mi primer programa en Go // Mi primer programa en go package main import "fmt" func main() { fmt.Printf("Hola mun...
Algunas sentencias 1. Las sentencias if se escriben como: a := 1 // Asignacio’n con autotipo if a...
Mapa Un mapa es una asociaci´n clave valor. o 1 // testgo project main.go 2 package mai...
Gorutinas Una gorutina es una funci´n (o sentencia) que se ejecuta de o manera concurrente y...
Channel Los canales son similares a las colas de mensaes y permiten la comunicaci´n entre c´digo concurrentes. ...
Productor Consumidor con Gorutinas y Channels 1 package main; 2 import ("fmt"; "time"; "math/rand") 3 4 var canal = ...
Select Select es similar a la cl´usula switch pero permite hacer a polling sobre vari...
Locks Dentro del pauete ‘‘sync’’ se encuentra una colecci´n de o fu...
WaitGroups Los grupos de espera son un conjunto de gorutinas que se deben esperar para poder continuar con la ejecuci´n....
Futures Un future es la promesa de un c´lculo que se efectuar´ cu´ndo a ...
Futures Cont. Para poder utilizar los resultados generados por una promesa o future1 func InverseProduct (a Matrix...
Diferidos Go permite programar la llamada a una funci´n cuando un o ...
M´s informaci´n a o P´gina de Go a Effective Go Especificaci´n del Lenguaje o ...
of 21

Presnetación Go

Presentación de Lenguaje GO de la cátedra Introducción a la Concurrencia de la UNPSJB.
Published on: Mar 4, 2016
Published in: Education      
Source: www.slideshare.net


Transcripts - Presnetación Go

  • 1. El lenguaje de programaci´n Go oIntroducci´n a la Concurrencia o UNPSJB - 2012 Defoss´ Nahuel e 5 de noviembre de 2012
  • 2. Introducci´n oEstructura del lenguajeInstalaci´n oHerramientasHola MundoAlgunas caractrer´ ısticasPrimitivas de Concurrencia Gorutinas Canales Select Grupos de espera Futures DiferidosM´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-stablePara instalaci´n en windows oDescargar del Sitio Oficial y descomprimir en C: go yagregar 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() { 910 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] += 116 } else {17 //fmt.Printf("No existen")18 mapa[cadena] = 119 }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 item10 canal <- rand.Int() // Entero aleatorio11 }1213 }14 func cons(){15 cantidad := 116 for {17 entero := <-canal18 fmt.Printf("Recibi %.2d %dn", cantidad, entero)19 cantidad++20 }2122 }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). o1 func InvertirMatrizFuture(mat Matrix){2 future := make(chan Matrix) // Canal para recibir resultado3 // Se lanza el c’alculo en una gorutina4 go func () { future <- InvertirMatriz(mat)}5 return future // Retornamos el canal6 }
  • 19. Futures Cont. Para poder utilizar los resultados generados por una promesa o future1 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 114 }1516 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