Go es un lenguaje de programación de código abierto lanzado por Google en 2009, creado con la motivación de manejar el nivel de programación que tiene Google en cuanto a número de líneas de código y la cantidad de ingenieros que trabajan en el código. Además, para facilitar la interconexión de programas dentro de sistemas distribuidos de miles de máquinas.
En este meetup revisamos este lenguaje, sus principales características, qué empresas lo usan, cómo dar los primeros pasos y una aplicación de ejemplo.
2. ARKHO Innova
Meetup series
Gracias por su asistencia!!!
• Un espacio para compartir experiencias y conocimiento
• Un espacio para hacer relaciones entre personas y
equipos con intereses afines
• Un espacio para pasarla bien
6. Alrededor de 2008 el lenguaje fue mayormente diseñado y comenzó a
funcionar la implementación del compilador y el runtime.
Ian Lance Taylor y Russ Cox ingresaron el 2008.
Se vuelve un proyecto de código abierto el 2009.
Primera versión estable el 2012.
Historia
7. Google tenia las siguientes necesidades internas que no podía cubrir:
• Facilidad en programación concurrente.
• Velocidad de compilación.
• Rapidez de despliegue en sistemas distribuidos.
• Aprovechar características multicore.
• Velocidad, Confiabilidad y Simplicidad.
Motivos
8. Facilitar la creación de software:
• Eficiente (rendimiento aproximado a C).
• Diseñado para hardware moderno (multi-core, red).
• Seguro: a nivel de tipado de datos y memoria.
• Divertido de desarrollar.
Aunque inicialmente estaba orientado para crear “System programs” (CLI
apps, Web servers) resultó ser un gran lenguaje de propósito general.
Objetivos
9. • Conceptos fáciles de entender.
• No necesidad de pre-declarar cada intención.
• Si algo anda mal debe ser detectado.
Objetivos
10. • Lenguaje compilado.
• Tipado estático.
• Permite escribir programas concurrentes de manera fácil y menos
propenso a errores.
• Con Garbage Collector.
• Multiplataforma: Windows, Linux, OS X, FreeBSD.
• Fácil de desplegar.
• Compilación rápida.
• Excelente rendimiento.
Características
11. • 25 keywords
Características
break default func interface select
case defer go map struct
chan else goto package swich
const fallthrough if range type
continue for import return var
12. • Archivos compilados son específicos para cada OS.
• Aplicaciones tienen el runtime “linked statically”.
• No require una máquina virtual externa.
• Lenguajes ancestros:
• Go está diseñado como una siguiente generación del lenguaje C.
• Go toma prestado alguna sintaxis de C.
• También toma prestado de Pascal, Modula, Oberon.
• Go intenta reducir la cantidad de tipeo.
Características
13. Implementa algunas características críticas de orientación a objetos:
• Interfaces
• Custom types pueden implementar una o más interfaces.
• Types implementan interfaces implicitamente , simplemente
implementando los métodos de la interfaz.
• Custom types pueden tener member methods.
¿Es orientado a objetos?
14. No soporta:
• Herencia de type.
• Conversión implícita de números.
¿Es orientado a objetos?
15. type persona struct {
edad int
nombre string
}
func (p persona) resumen() string {
strEdad := fmt.Sprintf("%d", p.edad)
return "La edad de " + p.nombre + " es " + strEdad
}
func main() {
ella := persona{edad: 20, nombre: “Alex“}
fmt.Println(ella.resumen())
}
¿Es orientado a objetos?
18. (5to) lenguaje más amado: 63.3 %
(3ro) más buscado: 13.5%
Top paying:
US: (1ro) $110.000
Worldwide: (5to) $64.516
Fuente: https://stackoverflow.com/insights/survey/2017
Stackoverflow developer survey
2017
19. • Case sensitive.
• Todas las variables tienen un tipo asignado.
• La asignación de tipo de variable puede ser explícita o implícita.
• Funciones y campos que se exportan deben tener la primera letra
mayúscula.
• Punto y coma no es necesario.
• Salto de línea termina un statement.
• Bloques de código deben ir dentro {}.
Sintaxis esencial
20. • Funciones disponibles integradas que pertenecen al package builtin:
len(string) retorna el largo de un string
panic(error) detiene la ejecución y muestra un mensaje
Sintaxis esencial
21. Aplicación de ejemplo
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
mensaje := "Docker (U0001f40b) está escrito en Go"
fmt.Fprint(w, "<h1>"+mensaje+"</h1>")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":7800", nil)
}
23. Con ganas de más… (Links en vivo)
• Visualizing Concurrency in Go
http://divan.github.io/posts/go_concurrency_visualize/
• A 3D Game Engine
https://azul3d.org/
• Open Source 2D Game Engine
https://engo.io/concepts/animation.html
• High Productivity web Framework
https://revel.github.io/
• Built with
https://trends.builtwith.com/framework
• Module Availability
http://www.modulecounts.com/
• Meetup sample code
https://github.com/arkhotech/meetup-go