Julio López Montalvo
@theblasfem
https://blogs.dropbox.com/tech/2014/07/open-sourcing-our-go-libraries/
https://sendgrid.com/blog/convince-company-go-golang/
https://code.google.com/p/go-wiki/wiki/GoUsers
golang.org/doc/install
En un archivo hello.go :
Crear los directorios:
C:\Go\src\github.com\user\hello
No olvides reemplazar "user" con tu username en github y "hello" con el nombre de tu package
Dentro del folder /hello agrega tus archivos .go
Ahora solo queda compilar e instalar tu package, ubicado dentro del folder de tu package:
Compílalo para ver si hay algún error con:
$go build
Sino hay errores, procede a instalar tu package con:
$go install
Ahora, si revisas dentro de C:\Go\bin encontrarás un archivo con el nombre de tu package, (un .exe si estás en Windows), este es un binario que puedes ejecutar en cualquier lugar(claro, solo si tienes tu $GOPATH/bin como variable de sistema), ejemplo:
//declaracion: var nombre tipo
var n int
//inicializacion
n = 2
//tambien puedes declarar e inicializar en la misma linea:
//Aquí Go infiere el tipo de dato
var n = 2
//También tienes otra sintaxis usando ':='
n := 2
//Declarando muchas variables:
var name string
var age int
var city string
//Pueden ser reducidas a:
var(
name, city string
age int
)
//El if de toda la vida, pero acá puedes agregar
//una línea más para ejecutarla antes de los condicionales
//Declaramos una variable antes de entrar a las condiciones
if num := 9; num < 0 {
fmt.Println(num, "es negativo")
} else if num < 10 {
fmt.Println(num, "tiene 1 digito")
} else {
fmt.Println(num, "tiene multiples digitos")
}
//For clásico
for i := 0; i < 10; i++ {
fmt.Print(i)
}
//Empleándolo como un while:
var suma int
for suma < 100 {
suma += suma
}
respuesta := "B"
switch respuesta{
case "A", "C", "D", "E":
"Incorrecto"
case "B":
"Correcto"
default:
"No encontrada"
}
//Un array de 5 integers
var a [5]int
//Indicando la longitud implícitamente e inicializando
//con valores
a := [...]int{1,2,3,4,5}
//Asignando Valores
a[0] = 5
//Un slice apunta a un array además de indicar una longitud
//Son creados con make, aquí un slice de strings con longitud 3
s := make([]string, 3)
//Agregando valores
s[0] = "a"
//También puedes usar append
s = append(s, "b")
//Soporte al "reslice"
letters := []string{"a", "b", "c", "d", "e"}
fmt.Print(letters[1:3])
//b, c
//Recorriendo un slice con range
names := []string{"Julio", "Abel", "Piero"}
//i recibe el index y e el elemento
for i, e := range names{
fmt.Printf("%d: %s", i, e)
}
//0: Julio
//1: Abel
//2: Piero
//Un map con key tipo string y value tipo int
m := make(map[string]int)
//Asignando valores
m["uno"] = 1
//Inicialización literal
m := map[string]int{"uno": 1, "dos": 2}
//Remover un key/value de un map
delete(m, "uno")
//Recorrerlo con range
fruits := map[string]string{"a": "apple", "b": "banana"}
for k, v := range users {
fmt.Printf("%s : %s", k, v)
}
//a : apple
//b : banana
func sumar(a,b int) int {
return a+b
}
fmt.Print(sumar(2,3))
//5
//Las funciones tambien pueden escribirse como variables
sumar := func(a,b int) int{
return a+b
}
//Puedes retornar múltiples valores
func operacion(a, b int) int, int {
return a+b, a*b
}
fmt.Print(operacion(2,3))
//5, 6
//E incluso mandar múltiples datos
func sumar(nums ...int){
fmt.Print(nums)
}
sumar(1,2,3,4,5)
//[1,2,3,4,5]
type Person struct{
name string
age int
}
//Inicializando el struct
me := Person{"Gopher", 8}
fmt.Print(me)
//{Gopher 8}
//También podemos hacerlo de la manera:
me := Person{name: "Gopher", age: 9}
//Obteniendo valores
fmt.Printf("I'm %s and I've %d years", me.name, me.age)
//I'm Gopher and I've 8 years
//Cambiando valores
me.name = "Julio"
fmt.Print(me)
//{Julio 8}
//Un puntero nos ayuda en referenciar una dirección
//en memoria de algún dato
i := 10
//Para asignar un puntero tenemos que usar el caracter &
//a la variable a la que querramos apuntar
pointer := &i
//Aquí imprimimos su dirección en memoria
fmt.Print(pointer)
//0x1043617c
//Aquí "dereferenciamos"(usando el *) al puntero para
//obtener el valor al dato al que apunta
fmt.Print(*pointer)
//10
//Si afectamos al puntero, los cambios serán aplicados
//al valor al que apunta en memoria
*pointer = 20
fmt.Print(i)
//20
https://github.com/TheBlasfem/goexamples