04 Declaraci贸n de Variables

Published Apr 22, 2023

GoProgrammingTipos de datos

En Go, la conversi贸n de tipos de datos es expl铆cita, lo que significa que el programador debe indicar claramente c贸mo transformar un valor de un tipo a otro. Esto difiere de lenguajes como Java, que realizan algunas conversiones de manera impl铆cita. Veamos c贸mo funcionan estas conversiones en Go y qu茅 herramientas nos ofrece el lenguaje.

1. Conversi贸n entre Tipos Num茅ricos

En Go, para realizar una operaci贸n entre tipos num茅ricos diferentes, debes realizar una conversi贸n expl铆cita. El lenguaje no intentar谩 inferir el tipo resultante por s铆 mismo.

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, truncando el decimal
    fmt.Println(a + int32(b)) // Imprime: 11
}

Nota: Cuando conviertes de float a int, Go descarta la parte fraccionaria sin aplicar redondeo.

2. Conversi贸n de Strings a Enteros

Go ofrece el paquete strconv para manejar conversiones entre strings y n煤meros. Este paquete incluye dos funciones principales para convertir strings a enteros:

Atoi (ASCII to Integer)

Convierte un string de 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
    }
}

ParseInt

Es m谩s vers谩til que Atoi porque soporta diferentes bases (binario, octal, decimal, hexadecimal, etc.) y permite especificar el tama帽o del dato.

Definici贸n de la funci贸n:

func ParseInt(s string, base int, bitSize int) (i int64, err error)
  • s: El string a convertir.
  • base: La base num茅rica (2, 8, 10, 16, hasta 36).
  • bitSize: El tama帽o en bits del valor (8, 16, 32, 64).

Ejemplo: Convertir un string decimal a entero con bitSize:

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 excede el rango del bitSize especificado, se genera un error.

3. Manejo de Errores en Conversiones

Las funciones de conversi贸n en Go devuelven dos valores:

  1. El valor convertido.
  2. Un error que indica si la operaci贸n fue exitosa.

Es una pr谩ctica com煤n validar este error para manejar situaciones inesperadas.

Ejemplo: Manejo de errores con ParseInt:

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

Adem谩s de convertir strings a enteros, tambi茅n puedes convertir n煤meros a strings usando strconv.Itoa (Integer to ASCII).

Ejemplo:

package main

import (
    "fmt"
    "strconv"
)

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

Resumen

  • Go no realiza conversiones impl铆citas. Todo debe ser expl铆cito.
  • Usa strconv.Atoi para convertir strings a enteros base 10.
  • Usa strconv.ParseInt para conversiones m谩s avanzadas.
  • Maneja errores en conversiones para evitar fallos en tiempo de ejecuci贸n.
  • Convierte entre tipos num茅ricos usando las funciones de conversi贸n incorporadas.

Las conversiones expl铆citas pueden parecer un poco m谩s detalladas, pero hacen el c贸digo m谩s claro y seguro. 隆Practica estos conceptos para dominarlos! 馃殌

Elprogramadorgt - Blog 漏 2025