04 Declaraci贸n de Variables
Published Apr 22, 2023
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:
- El valor convertido.
- 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! 馃殌