Cheatsheet / chuleta

Datos

Variables y constantes

Declaración con tipado

var nombre tipo    
const nombre tipo

var nombre tipo = valor
const nombre tipo = valor

var nombre1, nombre2, ... tipo
const nombre1, nombre2, ... tipo

var nombre1, nombre2, ... tipo = valor1, valor2, ...
const nombre1, nombre2, ... tipo = valor1, valor2, ...

var/const (
   nombre1 tipo = valor1
   nombre2 tipo = valor2
   ...
)

Declaración de variables por inferencia

nombre := valor
nombre1, nombre2, ... := valor1, valor2, ...

Tipos de datos básicos

Cadena

string

Boolean o lógico

bool

Números

Enteros

Sin signo
byte    1 byte.  0..255
uint8   1 byte.  0..255
uint16  2 bytes. 0..65535
uint    4 bytes. 0..4294967295
uint32  4 bytes. 0..4294967295
uint    8 bytes. 0..18446744073709551615
uint64  8 bytes. 0..18446744073709551615
Con signo
int8   1 byte.  -127..128
int16  2 bytes. -32768..32767
rune   4 bytes. -2147483648..2147483647
int    4 bytes. -2147483648..2147483647
int32  4 bytes. -2147483648..2147483647
int    8 bytes. -9223372036854775808..9223372036854775807
int64  8 bytes. -9223372036854775808..9223372036854775807

Reales o decimales

float32   4 bytes con signo
float64   8 bytes con signo
complex32 4 bytes con signo + parte imaginaria
complex64 8 bytes con signo + parte imaginaria

Colecciones

Arrays

Los arrays son colecciones de datos del mismo tipo, con un tamaño fijo. Se referencian por un índice, que es la posición del elemento en el array, comenzando desde cero y terminando en su longitud - 1

// Declaracion y creacion
var variableArray[tamaño]tipoDato
variableArray := [tamaño]tipoData{valor1, valor2, ...}

// Asignacion de valor a un elemento
variableArray[indice] = valor

// Acceso a un elemento
variableArray[indice]

// Longitud de un array
len(variableArray)

// Capacidad de un array (igual a longitud)
cap(variableArray)

// Extraer un fragmento del array
variableArray[posicionInicio:posicionFinal]

// Extraer desde el inicio hasta posición-1
variableArray[:posicion]

// Extraer desde posición hasta el final
variableArray[posicion:]

// Arrays multidimensionales
var variableArray[tam1][tam2][...]tipoDato

// Asignacion multidimensional
variableArray[pos1][pos2][...] = valor

// Acceso multidimensional
variableArray[pos1][pos2][...]

Slices

Un slice (fragmento), es un tipo de array que puede ser dinámico, es decir que puede variar su tamaño. La forma de acceder o extraer fragmentos de un slice es igual que en un array.

// Declaracion y creacion
var variableSlice[]tipoDato
variableSlice := variableArray[posicionInicio, posicionFinal]
variableSlice := make([]tipoDato)
variableSlice := make([]tipoDato, longitud)
variableSlice := make([]tipoDato, longitud, capacidad)


// Asignacion de valores desde array
variableSlice = variableArray[posicionInicio, posicionFinal]

// Asignacion directa de valores
variableSlice = []tipoDato{valor1, valor2, ...}

// Agregar nuevos valores
variableSlice = append(variableSlice, valor1, valor2, ...)

// Copiar valores entre slices
copy(variableSlice1, variableSlice2)

Mapas

Un mapa es una colección de datos de tipo clave/valor. En lugar de acceder mediante un índice, se accede mediante un valor de clave.

// Declaracion y creacion
var variableMapa map[tipoClave]tipoValor
variableMapa := make(map[tipoClave]tipoValor

// Agregar o modificar elemento
variableMapa[clave] = valor

// Eliminar elemento
delete(variableMapa, clave)

// Verificar si existe un elemento
// var1 recoge la clave (si existe)
// var2 es un boolean: true si existe
var1, var2 = variableMapa[clave]
_, var = variableMapa[clave]

// Recorrer un mapa
for varClave, varValor := range variableMapa {
   ...
}

Operadores

Asignación

var/const nombre tipo = valor  // Con tipado
nombre := valor                // Por inferencia

Aritméticos

expr1 + expr2   Suma
expr1 - expr2   Resta
expr1 * expr2   Multiplicación
expr1 / expr2   División
expr1 % expr2   Resto (de la división)

Incremento / decremento

valor++   // valor = valor + 1
valor--   // valor = valor - 1

Asignación aritmética

valor1 += valor2    // valor1 = valor1 + valor2
valor1 -= valor2    // valor1 = valor1 - valor2
valor1 *= valor2    // valor1 = valor1 * valor2
valor1 /= valor2    // valor1 = valor1 / valor2
valor1 %= valor2    // valor1 = valor1 % valor2

Concatenación

string1 + string2         // Concatenación
variableString += string  // Concatenación y asignación

Comparación

valor1 == valor2  igual a 
valor1 != valor2  distinto de (no igual a)
valor1 <  valor2  menor que
valor1 <= valor2  menor o igual que
valor1 >  valor2  mayor que
valor1 >= valor2  mayor o igual que

Lógicos o relacionales

valor1 && valor2   AND/Y
valor2 || valor2   OR/O
!valor             NOT/NO (negación)

Estructuras de control

if y else

if condición {
   // Código si condición es true
} 

if condición {
   // Código si condición es true
} else {
   // Código si condición es false
}

if condición1 {
   // Código si condición1 es true
} else if condición2 {
   // Código si condición2 es true
} [else ... {
   ...
}]

switch, case y default

switch {
  case condición1:
    // código si condición1 es true
  case condición2:
    // código si condición2 es true
  [case ...
    ...
  ]
  [default:
    // código si ninguna condición anterior es true
  ]
}

switch variable {
  case valor1:
    // código si variable == valor1
  case valor2, valor3, ...:
    // código si variable == valor2 o valor3...
  [case ...
    ...
  ]
  [default:
    // código si ningún valor anterior
  ]
}

for

// Bucle controlador de iterador
for iterador:=valorInicio; condiciónIterador; incrementoIterador {
  ...
  [break]
  ...
  [continue]
  ...
}


// Bucle "while"
iterador := valorInicio

for condiciónIterador {
  ...
  [break]
  ...
  [continue]
  ...
  incrementoIterador
}


// Bucle infinito
for {
  ...
  [break]
  ...
  [continue]
  ...
}

Rangos

// Bucle controlador de iterador
for índice/clave, valor := range  {
  ...
  [break]
  ...
  [continue]
  ...
}

Funciones

Conceptos básicos

// Funcion basica
func nombreFuncion() {
   ...
}

// Funcion con parametros
func nombreFuncion(param1 [, param2 ]) {
   ...
}

// Funcion con retorno
func nombre([params ])  {
   ...
   return 
}

// Funcion con retorno multiple
func nombre([params ]) (, ) {
   ...
   return , valor2[...]
} 

Funciones variádicas

// Funcion variadica
func nombre( tipo,  ...) {
   ...
   for indice, valor := range  {
      fmt.Printf("Indice %v > %v\n", indice, valor)
   }
}

Funciones anónimas

   ...
   // La funcion anonima se asigna un identificador
   identificador := func([params])  {
      ...
      return 
   }

   // Invocacion a la funcion anonima
   identificador([params])
   ...

Closures

   ...
   // Declaracion del closure
   identificador := nombreFuncion()
   ...

   // Invocacion al closure
   identificador([params])
   ...

func nombreFuncion() func([params])  {
   // Inicializacion variables internas

   return func([params])  {
      ...
      return 
   }
}

No hay comentarios:

Publicar un comentario