04 Declaración de Variables

Published Apr 22, 2023

GoProgrammingTipos de datos

🧠 Introducción

En Go, la conversión de tipos es explícita. Esto significa que, si deseas transformar un valor de un tipo a otro, debes indicarlo de forma explícita. A diferencia de otros lenguajes como Java, donde algunas conversiones se realizan de forma implícita, en Go todo se debe hacer con claridad. Esto contribuye a escribir un código más seguro y predecible.

1. Conversión entre Tipos Numéricos

Cuando trabajas con números de distintos tipos, debes realizar la conversión explícita para evitar errores.

Ejemplo: Convertir int a float

package main

import (
    "fmt"
)

func main() {
    var a int32 = 9
    var b float32 = 2.5

    // Convertimos `a` a float32 para sumarlo con `b`
    fmt.Println(float32(a) + b) // Imprime: 11.5
}

Ejemplo: Convertir float a int (truncamiento)

package main

import (
    "fmt"
)

func main() {
    var a int32 = 9
    var b float32 = 2.7

    // Convertimos `b` a int32, descartando la parte decimal
    fmt.Println(a + int32(b)) // Imprime: 11
}

Nota: Al convertir de float a int, Go descarta la parte fraccionaria sin redondear.

2. Conversión de Strings a Enteros

Para convertir cadenas de texto (strings) a enteros, Go utiliza el paquete strconv.

A. Usando strconv.Atoi

Convierte un string en base 10 a un entero.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    num, err := strconv.Atoi("83")
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println(num) // Imprime: 83
    }
}

B. Usando strconv.ParseInt

Esta función es más versátil, ya que permite convertir strings de bases variadas y especificar el tamaño en bits del resultado.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    num, err := strconv.ParseInt("255", 10, 8) // 255 en base 10 a 8 bits
    if err != nil {
        fmt.Println("Error:", err) // Imprime un error porque 255 no cabe en 8 bits
    } else {
        fmt.Println(num)
    }
}

Nota: Si el valor a convertir excede el rango permitido por el bitSize especificado, se generará un error.

3. Manejo de Errores en Conversiones

La mayoría de las funciones de conversión en Go devuelven dos valores: el resultado convertido y un error. Es importante validar el error para evitar que el programa falle en tiempo de ejecución.

Ejemplo: Uso de ParseInt con manejo de errores

package main

import (
    "fmt"
    "strconv"
)

func main() {
    num, err := strconv.ParseInt("300", 10, 8) // 300 excede el rango de 8 bits
    if err != nil {
        fmt.Println("Error:", err) // Imprime: value out of range
    } else {
        fmt.Println(num)
    }
}

4. Conversión de Enteros a Strings

Para convertir un número entero a string, Go ofrece la función strconv.Itoa (Integer to ASCII).

Ejemplo:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    num := 42
    str := strconv.Itoa(num)
    fmt.Println(str) // Imprime: "42"
}

✅ Conclusión

  • Conversión explícita: En Go, no se realizan conversiones implícitas; el programador debe indicar cómo transformar un valor de un tipo a otro.
  • Tipos numéricos: Puedes convertir entre tipos numéricos usando la sintaxis de conversión, teniendo en cuenta que al convertir de float a int se descarta la parte decimal.
  • Strings y números: El paquete strconv proporciona funciones como Atoi y ParseInt para convertir strings a enteros, además de Itoa para hacer la conversión inversa.
  • Errores: Siempre maneja el valor de error en las conversiones para asegurar que el programa se comporte de forma segura.

🛠️ Práctica recomendada

  1. Escribe un programa que:
    • Convierta un int32 a float32 y realice una operación aritmética.
    • Convierta un valor float32 a int32 y muestra el resultado.
  2. Utiliza strconv.Atoi para convertir un string a entero y maneja el error en caso de entrada inválida.
  3. Prueba strconv.ParseInt con diferentes bases (por ejemplo, binario o hexadecimal) y tamaños de bits.
  4. Convierte un entero a string usando strconv.Itoa y muestra el resultado.

🚀 Siguientes pasos

Ahora que ya sabes cómo realizar conversiones de tipos en Go, te recomiendo avanzar a aprender:

  • Manejo de errores más profundo: Cómo usar errors y patrones de manejo de errores en Go.
  • Funciones personalizadas: Crear funciones que integren conversiones y validaciones de datos.
  • Estructuras y métodos: Cómo crear tipos compuestos que involucren diversas conversiones dentro de sus métodos.