Todo tipo de dato puede ser asignado a una variable de tipo interface{}.
Ejemplo: a := []byte('abc')
func main() {
m := make(map[string]int, 99)
cap(m) //error
}
error: argumento inválido m (tipo map[string]int) para cap
La función incorporada cap devuelve el tamaño de espacio asignado a un arreglo o una rebanada, y no puede utilizarse con mapas.
make se emplea para inicializar slices, maps y canales.
Para obtener la capacidad de un mapa, utiliza la función len.
1. Aserción: verificar el tipo de una variable
var a interface{}
rc, ok := a.(interface{}) []byte []rune //Similar a isdigit en Python, retorna un valor booleano
// rc es el valor de a, ok es el resultado booleano de la aserción
Conversiones entre tipos en Go
I. Conversiones entre tipos primitivos
1. Cadena a entero
Importar paquete: strconv
int, err := strconv.Atoi(string)
2. Cadena a entero de 64 bits
int64, err := strconv.ParseInt(string, 10, 64)
3. Entero a cadena
string := strconv.Itoa(int)
4. Entero de 64 bits a cadena
string := strconv.FormatInt(int64, 10)
5. Cadena a flotante de 32 o 64 bits
float32, err := strconv.ParseFloat(string, 32)
float64, err := strconv.ParseFloat(string, 64)
6. Entero de 64 bits a entero
int := int(int64)
7. Entero a entero de 64 bits
int64 := int64(int)
II. Conversiones entre interface{} y otros tipos
Las conversiones incluyen conversiones implícitas y aserciones.
1. De interface{} a tipo específico: interfaceVar.(tipo_específico)
Principio: implementación medianet aserción. Ejemplo:
value, ok := a.(string)
if !ok {
fmt.Println("No se pudo convertir al tipo string")
return
}
fmt.Println("El valor es:", value)
2. Conversión implícita de tipo específico a interface{}
3. Conversión entre cadenas y []byte:
- Cadena a
[]byte:bytes := []byte(cadena) []bytea cadena:cadena := string(bytes)
Iteraciones con etiquetas en Go: break y continue
Ejemplo:
LABEL1:
for i := 0; i <= 5; i++ {
for j := 0; j <= 5; j++ {
if j == 4 {
goto LABEL1 //continue (etiqueta permite salir de bucles anidados)
//goto reinicia desde la etiqueta, reinicia variables
//break termina solo el bucle etiquetado, similar a return
}
fmt.Printf("i es: %d, y j es: %d\n", i, j)
}
}
Sobre la verificación de valores nil
Solo pueden tener valor nil los siguientes tipos: punteros, canales, funciones, interfaces, mapas o slices.