0% encontró este documento útil (0 votos)
11 vistas

1b Introgo

Este documento introduce el lenguaje de programación Go. Explica que Go fue creado por Ken Thompson y Rob Pike de Bell Labs, y Robert Griesemer de ETH Zurich, con el objetivo de combinar las ventajas de los lenguajes compilados y los interpretados. Resalta características clave de Go como su sintaxis simple, tipado estático, concurrencia nativa, rendimiento y facilidad de uso. Finalmente, proporciona ejemplos básicos de sintaxis de Go como funciones, variables, bucles y condicionales.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
11 vistas

1b Introgo

Este documento introduce el lenguaje de programación Go. Explica que Go fue creado por Ken Thompson y Rob Pike de Bell Labs, y Robert Griesemer de ETH Zurich, con el objetivo de combinar las ventajas de los lenguajes compilados y los interpretados. Resalta características clave de Go como su sintaxis simple, tipado estático, concurrencia nativa, rendimiento y facilidad de uso. Finalmente, proporciona ejemplos básicos de sintaxis de Go como funciones, variables, bucles y condicionales.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 32

Introducción

a Go
Motivación
• Go es un lenguaje nuevo: • Objetivo:

o Combinar ambos mundos:


o Propósito general
• Lenguajes compilados:
o Sintaxis concisa o Tipos estáticos
o Seguridad
o Sistema de tipos expresivo o Rendimiento

o Concurrencia • Lenguajes interpretados:


o Tipos dinámicos
o Expresividad
o Recolector de basura o Conveniencia

o Compilación rápida o Útil en programación de


sistemas modernos a gran
escala
o Ejecución eficiente

Introducción a Go 2
Rápido, divertido y productivo

Introducción a Go 3
Creadores (Google)
Bell Labs ETH Zurich

o Ken Thompson o Robert Griesemer


• Unix (con Dennis Ritchie) • V8 (JavaScript)
• ByC
• Sawzall
• “Reflections on trusting
trust” (premio Turing) • Java HotSpot VM
• UTF-8 (con Rob Pike) • Doctorando de Niklaus
Wirth (Pascal)
o Rob Pike
• Blit (X Windows…)
• Plan9, Inferno
• Limbo
• UTF-8 (con Ken
Thompson)

Introducción a Go 4
Contexto
• Influencias: • Elementos destacables:

o C del siglo XXI o Énfasis en la simplicidad


o Memoria gestionada
o familia de C++, Java, C# o Sintaxis ligera
o Compilación rápida
o Pascal, Modula, Oberon o Elevado rendimiento
(declaraciones, paquetes) o Soporta concurrencia
o Tipos estáticos
o Limbo, Newsqueak, CSP o Librería estándar consistente
(concurrencia) o Facilidad de instalación
o Autodocumentado (y bien
o Python, Ruby documentado)
(características dinámicas) o Código abierto (BSD)

Introducción a Go 5
Cosas que “faltan”
• sobrecarga de funciones y • tipos variantes (variant)
operadores
• tipos genéricos (templates)
• conversiones implícitas
• excepciones
• clases o herencia de tipos

• carga dinámica de código

• librerías dinámicas

Introducción a Go 6
La herramienta go
• > go comando
• bug • get
enviar parte de error obtener dependencias e instalarlas

• build • install
compilar e instalar paquetes y dependencias
compilar paquetes y dependencias
• list
• clean mostrar paquetes o módulos
eliminar objetos y cache
• mod
• doc gestión de módulos
mostrar documentación
• run
compilar y ejecutar
• env
mostrar variables de entorno de go
• test
realizar tests
• fix
actualizar paquetes a nuevas APIs • tool
ejecutar herramientas específicas
• fmt
formato automático de fuentes • version
mostrar la versión actual de Go
• generate
generar código automáticamente • vet
comprobación de errores (linting)

Introducción a Go 7
Web oficial
Web oficial: go.dev

Secciones a destacar:
• Descargas de Go.

• Inicio rápido.

• Documentación.

• Librería estándar.

• Buscador de paquetes.

• Blog.
Introducción a Go 8
Nociones iniciales
(ejemplos de gobyexample.com)

Introducción a Go 9
Ficheros e identificadores
• Fuentes de Go: • Identificadores:

o Se guardan en ficheros .go o Empiezan por letra (UTF-8) o


subrayado (similar a C)
o Nombre en minúsculas
• scanner.go o El subrayado ‘ _ ’ es un
identificador especial que se
descarta
o Se separan con subrayado
• scanner_test.go

o Existe un formato estándar.


Se aplica automáticamente
en muchos editores.

Introducción a Go 10
Paquetes

o estructuran el código o la librería estándar contiene


muchos paquetes y se puede
o cada .go pertenece a un crear paquetes propios
paquete
o se importan mediante import
o un paquete puede estar y cada paquete se compila
formado por muchos .go una única vez

o todo ejecutable ha de tener o la visibilidad viene dada por la


paquete (y función) main primera letra del
identificador:
• Mayúscula -> público
o el nombre es en minúsculas
• minúscula -> privado

Introducción a Go 11
Funciones

o se declaran con func o permiten varias variables de


retorno
o main no recibe parámetros ni
devuelve nada o Es obligatorio el ‘ { ’ en la
misma línea que func
o siguen el formato:
o El ‘ } ’ se pone en una línea
func función(lparam) (ldevol){ suelta al final del código

}

donde lparam es (param1 tipo1,…)


y ldevol es (dev1 tipo1,…)

Introducción a Go 12
Hola mundo
Este es el clásico hola mundo.

Suponiendo que el código esté en


el fichero “hello-world.go”, lo
podemos ejecutar con go run.

Podemos obtener un ejecutable


con go build, y ejecutar
directamente ese binario.

Introducción a Go 13
Valores
Algunos ejemplos de los distintos
tipos de valores que tiene Go,
entre otros: cadenas, enteros,
flotantes, booleanos, etc.

Introducción a Go 14
Variables
En Go, las variables se declaran de
forma explícita y hay comprobación
de tipos por el compilador.

Se puede declara una o más


variables con var, e incluso varias a
la vez.

Go es capaz de inferir el tipo de las


variables que inicialicen. Cuando no
están inicializadas se inicializan
automáticamente al valor cero para
ese tipo.

La sintaxis := permite declarar e


inicializar una variable de forma
rápida (tiene algunas
contrapartidas)

Introducción a Go 15
Constantes
Go soporta constantes de carácter,
cadenas, booleanos y valores
numéricos que se declaran
mediante const.

Pueden aparecer en los mismos


sitios que las declaraciones con var.

Permiten realizar operaciones


aritméticas con precisión arbitraria.

Una constante numérica adquiere el


tipo cuando se utiliza o se fuerza un
tipo.

Introducción a Go 16
Bucle for
El único bucle en Go es for, y
permite expresar otros tipos de
bucles comunes:

• Con condición estilo while

• Tradicional con contador

• Infinito sin condición (uso de


break para salir)

• También se puede utilizar


continue para saltar a la
siguiente iteración.

Introducción a Go 17
If/else
Su uso en Go es similar a otros
lenguajes.

Se puede tener un if sin else.

No son necesarios los paréntesis


para las condiciones.

Se puede tener una sentencia antes


de las condiciones. Todas las
variables declaradas están
disponibles en todas las ramas.

No existe el operador ternario


(c ? a : b), por lo que siempre es
necesario emplear un if.

Introducción a Go 18
Switch
En Go, switch permite
expresiones de muchos tipos y no
sólo enteros o constantes.

Se pueden separar expresiones


con comas y utilizar default para
indicar todos los demás casos.

No se utiliza break, se termina


cada case de forma automática.

Introducción a Go 19
Switch (II)
Existe un switch de tipos que
permite comparar tipos en lugar
de valores.

Se puede utilizar para obtener el


tipo de una variable de tipo
interface{}.

Introducción a Go 20
Arrays
En Go, un array es una secuencia
de valores del mismo tipo de
longitud determinada. El tamaño
es parte del tipo.

Existe la función propia len() que


nos devuelve la longitud del
array.

Siempre se pasan por valor (no


copia).

Es mucho más común ver slices


que arrays en Go.

Introducción a Go 21
Slices
Los slices son clave en Go, permiten
mayor funcionalidad que los arrays
tradicionales.

El tipo de un slice es únicamente el


de los elementos que contiene (no
la longitud). Se utilizan como arrays.

Para crearlos se puede utilizar la


función propia make(). También se
puede utilizar len() para obtener su
longitud.

Además soportan otra funcionalidad


como append() que permite añadir
elementos devolviendo un nuevo
slice.

Introducción a Go 22
Slices (II)
Los slices también se pueden
copiar con la función propia
copy().

Soportan el operador de reslicing,


con el formato slice[bajo:alto].
Así, s[2:5] devuelve un nuevo slice
con los elementos s[2], s[3] y s[4]
(pero no s[5]). Se puede omitir
uno de los extremos del reslice.

Se pueden construir slices


multidimensionales. Es necesario
llamar a make() para cada
dimensión.

Introducción a Go 23
Mapas
Son el tipo asociativo (dicts, hash-
maps…) en Go. Para crear un map
vacío, se utilizar make():
make(map[tipo-clave]tipo-val)

Se asignan y obtienen valores


como en un array o slice.

Se puede comprobar la existencia


de un elemento con el segundo
valor de retorno booleano (se
utiliza _ para ignorar el valor que
se devuelve primero).

Introducción a Go 24
Range
Este tipo de bucle permite iterar
sobre los valores de algunas
estructuras de datos como arrays,
slices, maps y cadenas.

En arrays y slices devuelve índice,


valor.

En mapas devuelve pares clave,


valor. No se debe presuponer un
orden concreto.

En cadenas itera sobre las


distintas runas (caracteres
Unicode)

Introducción a Go 25
Funciones
Las funciones en Go son muy
similares a otros lenguajes. Se
requiere returns explícitos.

Soportan múltiples valores de


retorno y cierres (lambdas o
funciones anónimas).

Las funciones son ciudadanos de


primera clase en Go, y pueden ser
variables, parámetros y tipos de
devolución en sí.

Introducción a Go 26
Funciones (II)
El uso de múltiples variables de
retorno es idiomático en Go y se
utiliza en la librería estándar.

Se puede ignorar alguna variable


de retorno mediante _ .

Introducción a Go 27
Funciones (III)
También se soportan cierres. Son
útiles para definir una función en
línea sin tener que nombrarla
para llamadas, devoluciones o
valores de tipo función.

Introducción a Go 28
Cadenas
Una cadena en Go es un slice de
bytes inmutable (solo lectura).

El lenguaje y la librería estándar


tratan las cadenas como
contenedores de texto codificado
en UTF-8.

En otros lenguajes, las cadenas


contienen caracteres; en Go, las
cadenas contienen runas que son
enteros (a veces multibyte) que
representan un code point en
Unicode.

Introducción a Go 29
Structs

Son similares a otros lenguajes:


• Pueden tener métodos.
• Se puede devolver un puntero a una variable struct local.
• Se accede a los campos con punto, incluso si son punteros.

Introducción a Go 30
Métodos
Se pueden definir métodos sobre structs.

El método se asocia a un struct mediante un receptor


que va antes del nombre de la función.

El receptor puede ser por puntero o por valor. Go se


encarga de hacer la conversión de forma automática,
pero puede ser interesante hacer receptores por
puntero para evitar que se copien todos los elementos
o para que las modificaciones persistan.

Se pueden definir colecciones de métodos en


interfaces.

Introducción a Go 31
Aprendiendo Go
Existe mucha más información tanto en los tutoriales de la web de Go como
en gobyexample. Entre otros, sería muy recomendable investigar:

• La librería estándar de Go.

• Otros ejemplos de gobyexample


o Interfaces
o Errores
o Gorutinas y paralelismo
o Gestión de tiempo
o Ficheros y redes
o Encoding, JSON, compresión, cifrado
o Etc.

Introducción a Go 32

También podría gustarte