Lenguaje de Programación: Go

Documentos relacionados
Modulo 1 El lenguaje Java

Creación de Funciones de Conducción

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

Preliminares. Tipos de variables y Expresiones

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

Creación y administración de grupos locales

MEJORAR EL RENDIMIENTO DEL EXPLORADOR DE INTERNET

Curso PHP Módulo 1 R-Luis

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

4. Programación Paralela

Tema: Arreglos de Objetos en C++.

Clases y Objetos. Informática II Ingeniería Electrónica

Se guardan en archivos con extencion c y los cabezales con extension h

Introducción a la programación orientada a objetos

Introducción a PHP. * No es necesario declarar previamente las variables.

Programación Orientada a Objetos con Java

Programación Genética

Capítulo 9. Archivos de sintaxis

Olimpiada Internacional de Informática Julio de 2011, Ciudad de Pattaya, Tailandia Tareas de la Competencia Día 2 [COL] Español 1.0.

Conociendo el ambiente de programación de Java. M. en C. Erika Vilches

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Diagramas del UML. A continuación se describirán los diagramas más comunes del UML y los conceptos que representan: Diagrama de Clases

7.- Seleccionando funciones friend o funciones miembro para sobrecarga de operadores.

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Desarrollo de Aplicaciones Web Por César Bustamante Gutiérrez. Módulo I: Conceptos Básicos Tema 1: Concepto iniciales.

App para realizar consultas al Sistema de Información Estadística de Castilla y León

LABORATORIO Nº 3 PRÁCTICA DE FUNCIONES EN MICROSOFT EXCEL

Definición de clases: Herencia, polimorfismo, ligadura dinámica

Introducción al tipo de dato ARRAY

Capítulo 1 Documentos HTML5

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

JavaScript como Orientación a Objetos

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Sistemas Operativos Práctica 4

Centro de Capacitación en Informática

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

Manual del Investigador de OpenClinica

Ejemplos básicos de webmathematica para profesores

Autor: Microsoft Licencia: Cita Fuente: Ayuda de Windows

Capítulo 3 Usando GUIDE. 3.1 Acerca de GUIDE

Unicenter Service Desk r11.1. Guía para el Usuario Final de Service Desk

Proyecto Help Desk en plataforma SOA Alcance del Sistema Versión 1.2. Historia de revisiones

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Creación y administración de grupos de dominio

El lenguaje de Programación C. Fernando J. Pereda

! Una variable declarada con final no puede volver a ser reinicializada. numero = 2;! ! Para definir constantes

Manual del usuario USO DEL MERCADO

LiLa Portal Guía para profesores

Autores en Web of Science y ResearcherID

Introducción a la Programación en MATLAB

FACULTAD DE INGENIERÍA, U.B.A. Seminario de Sistemas Embebidos TRABAJO PRÁCTICO 0

Kepler 8.0 USO DEL ERP

Procedimiento para realizar la configuración de Internet Explorer y usar el Sistema de reservaciones Go! Res versión 4.x

Modelo de Objetos Distribuidos

GENERACIÓN DE CÓDIGO

10 requisitos para una publicidad efectiva

Interoperabilidad de Fieldbus

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y

Gestión de incidencias

Estructuras de Sistemas Operativos

Roles y Características

Operación de Microsoft Word

Prof. Dr. Paul Bustamante

PROGRAMA PARA LA RECEPCIÓN VALIDACIÓN Y RESGUARDO DE DOCUMENTOS FISCALES VERSIÓN 1.00 MANUAL DE OPERACIÓN

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

Guía Corta: Alcance y Asociaciones. 1. Preliminares: Nombres y Asociaciones

JavaScript toma su sintaxis de los lenguajes de programación más conocidos, fundamentalmente C/C++, aunque también algo de Pascal.

Base de datos en Excel

Access Control. Manual de Usuario

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2.

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

SAP BusinessObjects Edge BI Standard Package La solución de BI preferida para. Empresas en Crecimiento

PowerPoint 2010 Modificar el diseño de las diapositivas

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON)

Visual Studio Team System 2010

CAPITULO 4. Requerimientos, Análisis y Diseño. El presente capítulo explica los pasos que se realizaron antes de implementar

Guías _SGO. Gestione administradores, usuarios y grupos de su empresa. Sistema de Gestión Online

Workflow, BPM y Java Resumen de la presentación de Tom Baeyens

Pasos para Realizar un Programa de lenguaje C en modo Consola en Visual Studio 2008 INDICE

FACULTAD DE INGENIERÍA

Prácticas de programación en C con MinGW Developer Studio

Instalación del programa PSPP y obtención de una distribución de frecuencias.

COMO CREAR UN DIAGRAMA DE FLUJO

5.1.1 Sumadores con anticipación de Acarreo. g i = a i b i. c i = c i-1 p i + g i s i = p i + c i-1. c 0 = g 0 + c -1 p 0

Mantenimiento Limpieza

Capitulo 5. Implementación del sistema MDM

myappgen Usted Construye la aplicación mientras la ejecuta

GUÍA DE USUARIO: GOOGLE DRIVE

Android Creación de una aplicación sencilla: Forwarding - Página 1 -

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Introducción a los sitios de SharePoint en Office 365

Ejemplos de conversión de reales a enteros

Concurrencia. Primitivas IPC con bloqueo

Transcripción:

Centro de Investigación y de Estudios Avanzados del I.P.N 9 de Noviembre de 2011

Go Es un lenguaje de programación de propósito general que es promovido por: Rob Pike, Robert Griesemer, Ken Thompson, Russ Cox, Ian Lance Taylor. Todos ellos de Google Go tiene las siguientes características: Lenguaje compilado Tipado estático Rápido Soporte de concurrencia Open Source Página web: http://golang.org

Go Existen dos compiladores para Go: Gccgo - Basado en GCC Suite 6g, 8g, etc. (Dependiendo de la arquitectura)

Hello world! Cada código fuente declara el paquete al que pertenece (main), además de los paquetes a usar (fmt) Funciones se declaran con func Comentarios: /* comentario multilínea */ // comentario una línea El punto y coma (;) es opcional package main import " fmt " func main ( ) { fmt. P r i n t f (" H e l l o world ")

Declaraciones Se utiliza la palabra reservada var El tipo de dato se pone al final v a r x, y, z i n t

Asignación múltiple Go permite hacer asignación múltiple Dichas asignaciones se realizan en paralelo i, j = j, i // i n t e r c a m b i a i con j

Funciones El tipo se pone después del nombre de la variable Cuando dos o más parámetros son del mismo tipo solo es necesario el tipo en el último parámetro func add ( x i n t, y i n t ) i n t { r e t u r n x + y func add ( x, y i n t ) i n t { r e t u r n x + y

Funciones Una función puede regresar cualquier número de resultados func swap ( x, y s t r i n g ) ( s t r i n g, s t r i n g ) { r e t u r n y, x

Asignación corta Dentro de una función, se puede usar := en lugar de var x := 1 y, z := 2, 3

Constantes Se utiliza la palabra reservada const. Pueden ser string, booleanos o numéricos. El tipo de la constante puede obtenerse del contexto c o n s t Pi f l o a t 6 4 = 3.14 c o n s t cadena = " Hola mundo"

For Solo existe una estructura para los ciclos en Go (for). No se usan paréntesis y las llaves son obligatorias. f o r i := 0 ; i < 1 0 ; i++ { sum += i f o r sum < 1000 { // w h i l e sum += sum f o r { // i n f i n i t o

If No se usan paréntesis y las llaves son obligatorias. También puede agregarse una sentencia antes de la condición x = 10 i f x < 0 { fmt. P r i n t l n (" x es menor que 0") i f v := 5 ; x < v { fmt. P r i n t l n (" x es menor que v ")

Defer Defer ejecuta una función cuando la función que la encierra regresa Se utiliza una pila para para resolver el orden de varios defer Útil para cerrar archivos func f ( ) { f o r i := 0 ; i < 5 ; i++ { d e f e r fmt. P r i n t f (" %d ", i )

Ejercicio: Defer Cuál es la salida? func t r a c e ( s s t r i n g ) { fmt. P r i n t l n (" e n t e r i n g : ", s ) func u n t r a c e ( s s t r i n g ) { fmt. P r i n t l n (" l e a v i n g : ", s ) func a ( ) { t r a c e (" a ") d e f e r u n t r a c e (" a ") fmt. P r i n t l n (" i n a ") func b ( ) { t r a c e (" b ") d e f e r u n t r a c e (" b ") fmt. P r i n t l n (" i n b ") a ( ) func main ( ) { b ( )

Structs Es una colección de datos Cada dato se puede acceder con un punto type V e r t e x s t r u c t { X i n t Y i n t v := V e r t e x {1, 2 v. X = 4

Structs Se puede asignar un subconjunto de campos usando la notación campo:valor El prefijo & construye un puntero a la estructura v a r ( p = V e r t e x {1, 2 // t i p o V e r t e x q = &V e r t e x {1, 2 // t i p o V e r t e x r = V e r t e x {X : 1 // Y: 0 es i m p l i c i t o s = V e r t e x { // X: 0 and Y: 0 )

New La expresión new(vertex) asigna memoria para Vertex y regresa un puntero a esta No existe un delete o free. Go tiene un garbage collector type V e r t e x s t r u c t { X, Y i n t func main ( ) { v a r v V e r t e x = new ( V e r t e x ) v := new ( V e r t e x )

Arreglos Los arreglos son valores y no punteros como en C. Entonces, el asignar un arreglo a otro copia todos sus elementos v a r i n t A r r a y [ 3 ] i n t i n t A r r a y 2 := [ 3 ] i n t {1, 2, 3 i n t A r r a y 3 := [... ] i n t {4, 5, 6

Arreglos Si pasamos un arreglo a una función, este recibe una copia del arreglo y no un puntero a este. Sin embargo, también podemos usar la dirección de memoria del arreglo. func f ( a [ 3 ] i n t ) { a [0]=10 func f p ( a [ 3 ] i n t ) { a [0]=10 func main ( ) { v a r a r [ 3 ] i n t f ( a r ) fmt. P r i n t l n ( a r ) f p (& a r ) fmt. P r i n t l n ( a r )

Ejercicio: Invertir un arreglo Implemente una función que invierta un arreglo Utilice la asignación múltiple

Ejercicio: Invertir un arreglo Implemente una función que invierta un arreglo Utilice la asignación múltiple func r e v e r s e A r r a y ( a [ 1 0 ] i n t ) [ 1 0 ] i n t { f o r i, j := 0, l e n ( a ) 1; i < j ; i, j = i +1, j 1 { a [ i ], a [ j ] = a [ j ], a [ i ] r e t u r n a

Slices Los slices son una rebanada de un arreglo (una referencia a estos). Los slices son referencias. Por lo tanto, si asignamos un slice a otro, ambos se refieren al mismo arreglo. v a r a r r [ 3 ] i n t a r r = [ 3 ] i n t {1,2,3 v a r s l i c e [ ] i n t s l i c e = a r r [ 0 : 2 ]

Make Make sirve para crear slices, maps, y channels. Estos tres tipos en realidad refieren a una estructura interna Make inicializa dicha estructura interna y crea la nueva estructura (slice, map, o channel) v a r v [ ] i n t = make ( [ ] i n t, 100) p := make ( [ ] i n t, 100)

Volviendo a Slices Un slice tiene largo y capacidad La capacidad de un slice es el máximo tamaño que esta puede crecer La capacidad se puede indicar con un tercer parámetro en make b := make ( [ ] i n t, 0, 5) // l e n ( b)=0, cap ( b)=5 fmt. P r i n t l n ( l e n ( b ), cap ( b ) )

Maps Mapean una llave a un valor Deben ser creados con make m = make (map [ s t r i n g ] V e r t e x ) m[ " B e l l Labs " ] = V e r t e x { 40.68433, 74.39967, fmt. P r i n t l n (m[ " B e l l Labs " ] )

Maps Para probar si una llave esta presente en un mapa se usa una asignación múltiple m = map [ s t r i n g ] f l o a t 6 4 { " 1 " : 1, " p i " : 3. 1 4 1 5 v a r v a l u e f l o a t 6 4 v a r p r e s e n t b o o l value, ok := m[ " 2 " ]

Function full closures Un closure es una función que incluye el contexto en el que fue definida. Por ende, puede referenciar variables de dicho contexto

Function full closures func adder ( ) func ( i n t ) i n t { sum := 0 r e t u r n func ( x i n t ) i n t { sum += x r e t u r n sum func main ( ) { pos, neg := adder ( ), adder ( ) f o r i := 0 ; i < 1 0 ; i++ { fmt. P r i n t l n ( pos ( i ), neg( 2 i ) )

Ejercicio: Fibonacci closure Utilizando closures implemente una función que obtenga una serie de números Fibonacci

Ejercicio: Fibonacci closure Utilizando closures implemente una función que obtenga una serie de números Fibonacci func f i b ( ) func ( ) i n t { a, b := 0, 1 r e t u r n func ( ) i n t { a, b = b, a + b r e t u r n a f := f i b ( ) f o r i := 0 ; i < 10 ; i ++ { fmt. P r i n t l n ( f ( ) )

Range Un ciclo for (de tipo range) puede usarse para iterar sobre un slice o un map Se puede ignorar la llave o el valor usando _ v a r pow = [ ] i n t {1, 2, 4, 8, 16, 32, 64, 128 f o r i, v := range pow { fmt. P r i n t f ("2 %d = % d\n ", i, v ) f o r _, v := range pow { fmt. P r i n t f (" %d\n ", v a l u e )

Switch Cada caso se interrumpe ( breaks ) automáticamente a menos que termine con la palabra clave fallthrough s w i t c h os := runtime.goos; os { c a s e " darwin " : fmt. P r i n t l n ("OS X. " ) c a s e " l i n u x " : fmt. P r i n t l n (" Linux. " ) d e f a u l t : fmt. P r i n t f (" %s. ", os )

Métodos Go no tienes clases, pero se pueden definir métodos en tipos A p se le conoce como el receptor type V e r t e x s t r u c t { X, Y f l o a t 6 4 func ( p V e r t e x ) Sum ( ) f l o a t 6 4 { r e t u r n p. X + p. Y func main ( ) { p := new ( V e r t e x ) p. X = 3 ; p. Y=4 fmt. P r i n t l n ( p. Sum ( ) )

Métodos También el receptor puede ser un valor y no un puntero Usar un puntero sin embargo, evita copiar el valor entero y permite modificar el valor que el receptor apunta. type V e r t e x s t r u c t { X, Y f l o a t 6 4 func ( p V e r t e x ) Sum( ) f l o a t 6 4 { r e t u r n p. X + p. Y func main ( ) { p := new ( V e r t e x ) p. X = 3 ; p. Y=4 fmt. P r i n t l n ( p. Sum ( ) )

Goroutines Una gorutina es un hilo ( thread ) que ejecuta en paralelo con otras gorutinas Anteponer la palabra go a una función para correr esa función en una nueva gorutina

Channels Los canales son un conducto por el cual se puede enviar y recibir valores usando el operador canal (<-) Los datos van en la dirección de la flecha Un canal es creado usando make Envíos y recepciones se bloquean hasta que el otro lado está listo ch := make ( chan i n t ) //un c a n a l de e n t e r o s ch < v // e n v i a r v a l c a n a l ch v := < ch // r e c i b e d e l c a n a l ch y a s i g n a e l v a l o r

Buffered channels Un canal puede tener un buffer. Los envíos en un canal con buffer solo se bloquean si el buffer está lleno Las recepciones se bloquean cuando el buffer está vacío ch := make ( chan i n t, 100)

Range y Close El que envía puede cerrar un canal para indicar que no enviará más valores Usar range permite recibir valores del canal hasta que este sea cerrado f o r i := range ch

Criba de números primos Implementar la criba de Eratóstenes para obtener los números primos haciendo uso de gorutinas y canales

Criba de números primos Implementar la criba de Eratóstenes para obtener los números primos haciendo uso de gorutinas y canales f u n c g e n e r a r ( ) chan i n t { ch := make ( chan i n t ) go f u n c ( ) { f o r i :=2 ; ; i++ { ch< i ( ) r e t u r n ch f u n c f i l t r a r ( i n chan i n t, prime i n t ) chan i n t { out := make ( chan i n t ) go f u n c ( ) { f o r { i f i := < i n ; i % prime!= 0 { out< i ( ) r e t u r n out

Go web program Hello world from my Go program! Nos ayudaremos del paquete http

Herramienta: gofmt Permite formatear programas en Go Se le pasa el archivo a formatear como parámetro La bandera -w permite escribir el resultado en el archivo

Herramienta: gomake La versión de make en go es gomake Se requieren los archivos: include ${GO_HOME/go/src/Make.inc include ${GO_HOME/go/src/Make.cmd

Gracias!!!