







Historia
Características
Mecanismos de concurrencia
Ejemplos
Desventajas
Accesibilidad
Conclusiones
Bibliografía

Lenguaje Compilado
◦ Desempeño
◦ Velocidad
◦ Seguridad

Velocidad de desarrollo
◦ Elimina dependencias innecesarias
◦ Minimiza el árbol de dependencias
◦ Velocidad de compilación

Sintaxis Similar a C o C++
◦ Diferencias:





Declaración de las variables
For es la única instrucción para ciclos
Punto y coma innecesario a final de instrucciones
If y For no usan paréntesis para encerrar condición
No maneja clases; sino structs con métodos
package main
import "fmt“
var a,b int = 1,2
func main() {
a := 0
for i := 0; i < 10; i++ {
a += i
}
fmt.Println(a)
}

Lenguaje Orientado a Objetos?
◦ Lenguaje orientado a objetos donde no existen objetos
◦ Cubetas que implementan cosas



Recolector de basura
Open Source
Lenguaje Multipropósito
◦ Programación Mobil
◦ Programación Web
◦ Programación Sistemas
Do not communicate by sharing memory; instead,
share memory by communicating.





Elemento básico de concurrencia
Ejecución en paralelo
Misma dirección de memoria
Livianos
Multiplexados en muchos hilos del S.O
go list.Sort()
package main
import "fmt"
func sum(a []int, c chan int) {
sum := 0
for _, v := range a {
sum += v
}
c <- sum // send sum to c
}
func main() {
a := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(a[:len(a)/2], c)
go sum(a[len(a)/2:], c)
x, y := <-c, <-c // receive from c
fmt.Println(x, y, x + y)
}




Combinan comunicación con sincronización
Buffered o unbuffered
Envío y recepción de mensajes con operador ->
Bloquean hasta que ambos lados del canal esten listos.
canal <- 4
<- canal
package main
import "fmt"
func main() {
c := make(chan int, 2)
c <- 1
c <- 2
fmt.Println(<-c)
fmt.Println(<-c)
}



Uso de múltiples núcleos
Cálculos complejos divididos
Canal recibe resultados
const NCPU = 4 // number of CPU cores
func (v Vector) DoAll(u Vector) {
c := make(chan int, NCPU) // Buffering optional but sensible.
for i := 0; i < NCPU; i++ {
go v.DoSome(x,y)
}
// Drain the channel.
for i := 0; i < NCPU; i++ {
<-c // wait for one task to complete
}
// All done.
}

Lenguaje experimental

Compilador no funciona en Windows

No tiene manejo de excepciones








Tour
Compilación y ejecución en línea
Ejercicios
Prácticas de programación
Código fuente
Instrucciones de instalación
Documentación
Especificación




Go es un potente lenguaje de programación que mezcla
las ventajas de lenguajes compilados con las de los
lenguajes dinámicos.
Semántica similar a lenguajes de programación básicos.
Aumenta velocidad de desarrollo y por ende el
desempeño de los trabajadores.
Brinda mecanismos de concurrencia muy prácticos y de
uso sencillo.






www.golang.org
http://blog.golang.org/2010/09/go-concurrency-patterns-timing-outand.html
http://www.genbetadev.com/herramientas/introduccion-al-lenguajede-programacion-go
http://www.eweek.com/c/a/Application-Development/12-Things-toKnow-About-Googles-Go-Programming-Language-859839/
http://golang.org/doc/effective_go.html#concurrency
http://www.eweek.com/c/a/Application-Development/12-Things-toKnow-About-Googles-Go-Programming-Language-859839/1/
Descargar

Diapositiva 1 - Asteriscus.com