04 Declaración de Variables
Published Apr 22, 2023
🧠 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
aint
se descarta la parte decimal. - Strings y números: El paquete
strconv
proporciona funciones comoAtoi
yParseInt
para convertir strings a enteros, además deItoa
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
- Escribe un programa que:
- Convierta un
int32
afloat32
y realice una operación aritmética. - Convierta un valor
float32
aint32
y muestra el resultado.
- Convierta un
- Utiliza
strconv.Atoi
para convertir un string a entero y maneja el error en caso de entrada inválida. - Prueba
strconv.ParseInt
con diferentes bases (por ejemplo, binario o hexadecimal) y tamaños de bits. - 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.