Programación en Go

¿Qué es Go?

Go es un lenguaje propuesto por ingenieros de Google. Tiene una sintaxis algo menos propensa a errores que la de C y otros lenguajes derivados de él (como C++ y Java), y a la vez, más compacta que la de otros lenguajes como Pascal, Modula-2 o Ada.

Su página oficial, en la que además se pueden teclear y probar problemas sencillos "online", es: golang.org/

Desde allí se puede descargar también una versión instalable, que permitirá crear programas de mayor complejidad.

 


Introducción a Go

No soy ningún experto en Go, sólo alguien que está experimentando con este lenguaje. Aquí hay algunos ejemplos sencillos, para que quien ya haya programado en algún otro lenguaje puede comparar (si no has programado nunca, quizá todo sea demasiado poco detallado).

Después de cada ejemplo, incluiré alguna aclaración que ayude a entender las peculiaridades de ese ejemplo. En este primer acercamiento, los ejemplos serán programas simples y "no interactivos", que se puedan probar en la propia página de Go.

01.- Escribir en pantalla un texto sencillo

 
package main
 
import "fmt"
 
func main() {
    fmt.Println("Hola")
}    
 

Aclaraciones:

02.- Realizar operaciones aritméticas

 
package main
 
import "fmt"
 
func main() {
    fmt.Println("Suma: ", 2+3)
    fmt.Println("Resta: ", 3-2)
    fmt.Println("Producto: ", 2*3)
    fmt.Println("Cociente: ", 7/2)
    fmt.Println("Resto: ", 7%2)
}
 

03.- Comparaciones simples

 
package main
 
import "fmt"
 
func main() {
    if 2 > 1 {
        fmt.Println("2 es mayor que 1")
    } else if 1 > 2 {
        fmt.Println("1 es mayor que 2")
    } else {
        fmt.Println("2 es igual que 1")
    }
}
 

04.- Estructuras repetitivas simples

 
package main
 
import "fmt"
 
func main() {
    for i:=1; i<=10; i++ {
        fmt.Println(i)
    }
}
 

Se puede usar "i=1" para dar el valor inicial, con una sintaxis que recuerda más a la de C, pero en ese caso sí es necesario declarar la variable:

 
import "fmt"
 
func main() {
    var i int
    for i=1; i<=10; i++ {
        fmt.Println(i)
    }
}
 

Para declarar una variable, se usa la palabra "var", seguida del nombre de la variable y de su tipo ("int", en este caso, para indicar que es un número entero).

05.- Funciones

 
package main
 
import "fmt"
 
func suma(x, y int) int {
    return x + y
}
 
func main() {
    fmt.Println(suma(2, 3))
}
 

06.- Comparaciones múltipes

package main
 
import "fmt"
 
func main() {
	letra := 'a'
	switch letra {
		case 'a','e','i','o','u':
			fmt.Println("Es una vocal")
		case '0','1','2','3','4','5','6','7','8','9':
			fmt.Println("Es una cifra")
		default:
			fmt.Println("Es otro símbolo")
	}
}
 

package main
 
import "fmt"
 
func main() {
	var letra byte
	letra = 'c'
	switch {
		case letra=='a' ||  letra=='e' ||  letra=='i' ||  letra=='o' ||  letra=='u':
			fmt.Println("Es una vocal")
				case letra >='b' && letra <= 'z':
			fmt.Println("Es una consonante")
		case letra >='0' && letra <= '9':
			fmt.Println("Es una cifra")
		default:
			fmt.Println("Es otro símbolo")
	}
}
 

07.- Importar varias "bibliotecas"

package main
 
import (
	"fmt"
	"math"
)
 
func main() {
	radio := 3.5;
	circunferencia := 2 * math.Pi * radio;
	fmt.Println("Circunferencia = ", circunferencia)
	circulo := math.Pi * radio * radio;
	fmt.Println("Circulo = ", circulo)
}
 

08.- Dar varios valores a la vez

package main
 
import "fmt"
 
func intercambiar(x, y int) (int, int) {
	return y, x
}
 
func main() {
	var a, b int = 4, 6
	c, d := intercambiar(a, b)
	fmt.Println(c, d)
}

09.- Structs

package main
 
import "fmt"
 
type Punto struct {
	X int
	Y int
	Z int
}
 
func main() {
	v := Punto{1, 2, -4}
	v.Y = 3
	fmt.Println("X vale ", v.X)
	fmt.Println("Y todo el punto es ",v)
 
}
 

El resultado sería

X vale  1
Y todo el punto es  {1 3 -4}

10.- Arrays

package main
 
import "fmt"
 
func main() {
    pares := []int {2, 4, 6, 8, 10}
 
    // Mostramos los datos uno por uno
    for i := 0; i < len(pares); i++ {
        fmt.Printf("posicion %d, valor %d\n",
            i, pares[i])
    }
 
    // Mostramos todo el array
    fmt.Println("Pares:", pares)
 
    // De la posicion 1 a la 3
    fmt.Println("pares[1:4] ==", pares[1:4])
 
    // Desde el principio a la 3
    fmt.Println("pares[:3] ==", pares[:3])
 
    // Desde la 2 hasta el final
    fmt.Println("pares[2:] ==", pares[2:])
}
 

Su resultado sería

posicion 0, valor 2
posicion 1, valor 4
posicion 2, valor 6
posicion 3, valor 8
posicion 4, valor 10
Pares: [2 4 6 8 10]
pares[1:4] == [4 6 8]
pares[:3] == [2 4 6]
pares[2:] == [6 8 10]

Seguirá...

¿Hay más? Claro. Por ejemplo: "mapas", ficheros, interacción con el usuario, servicios de red... ¿Cuando? Pronto... si veo que hay gente interesada...


 

 

Novedades
  • 03-Ago-2012: Segunda parte de la introducción a Go (apartados 06 a 10)
  • 01-Ago-2012: Creado el apartado. Comienza la introducción a Go (apartados 01 a 05)
  • Cambios anteriores en la Web