En Go Golang, se puede definir un alias para un tipo de dato mediante
type Celsius float64
type Nombre string
y posteriormente declarar una variable de esa forma, en lugar de
var temperatura float64, que sea var temperatura Celsius
Las inicializaciones se pueden hacer explicitas de tipo o implícitas en las declaraciones
var x int = 100 es lo mismo que var x = 100
Si no se inicializan en la declaración, estas quedan con valor 0 ó “”
Dentro de una función se puede hacer una declaración e inicialización implícita mediante :=
x := 100 declara x del tipo de dato al cual iguala inicializando la variable.
Los punteros son igual que en ‘C’
Alternativamente se puede declarar una variable como un pointer con la función new() quedando en cero hasta ser inicializada
ptr := new(int)
*ptr = 3
Scope de variables es solo dentro del para de {} donde está definida
A nivel estructura de programa el scope es: Universal, Package (puede tener varios files), File
Conversiones
FormatFloat(f, fmt, prec, bitSize) – floating point to string
ParseFloat(s, bitSize) – Srting to float
LOOPS
for i:=0; i<10; i++
Equivalente a un while
i=0
for i<10{
i++
}
Loop infinito
for{
}
Switch/Case – (hace el break automático)
Switch x{
case 1:
fmt.Print(“1”)
case 2:
fmt.Print(“2”)
default:
fmt.Printf(“default”)
}
Input
num, err := fmt.Scan(&Data)
fmt.Printf(data)
ARRAYS
var x[5] int Declaración de array de 5 integers. Quedan inicializados en cero.
x := […] int {1, 2, 3, 4} Declaración con inicialización donde … toma el valor de 4 que es el tamaño del literal.
for i, v range x{
fmt.Printf(i, v)
}
Va a imprimir los índices junto con los valores del array – range devuelve DOS valores.
Slices se acceden igual que en Python con [:]
sli := [] int {1, 2, 3} A esto le faltan los … dentro de los [] para ser una inicialización de array. Se entiende entonces como una inicialización de un slice y se crea el undelying array con mismo length y capacity.
sli = make([] int, 10) Forma alternativa de crear un slice de iguales caracteristicas que el underlying array
sli = make([] int, 10, 15) Tercer parámetro es capacity. El underlying array es mayor. sli puede crecer
Un slice puede crecer con append hasta por encima del capacity (tamaño del undelying array) con un costo de tiempo ya que hace un array nuevo por cada append y copia los datos. Esto NO es una lista.
append(s S, x ...T) S // T is the element type of S s0 := []int{0, 0}
s1 := append(s0, 2) // append a single element s1 == []int{0, 0, 2}
s2 := append(s1, 3, 5, 7) // append multiple elements s2 == []int{0, 0, 2, 3, 5, 7}
s3 := append(s2, s0...) // append a slice s3 == []int{0, 0, 2, 3, 5, 7, 0, 0}
MAPS – implementación de hash tables (En otros lenguajes Diccionary)
var idMap map[string] int map[KEY] value declaration
idMap = make(map[string]int) Allocation
idMap := map[string]int { Inicialización con literal
“joe” : 123
}
idMap[“Jane”] = 456 Jane no existe y lo agrega con el valor 456, si existe, lo cambia
STRUCTS
type struct Person{
name string
addr string
}
var p Person
También con new
p := new(Person) inicializando todo en cero o “”
Literal
p = Person(name: “Joe”, addr: “this street”)
Declaración de funciones – func <name> (arg vartype) return type{ ejemplo:
func foo (x int) int{
}