Go Programming

Conversión eficiente de cadena a entero en Go

Spread the love

Go ofrece varios métodos eficientes para convertir cadenas a enteros, una tarea común en diversos escenarios de programación. Este artículo explora tres enfoques principales, destacando sus fortalezas y debilidades para ayudarte a elegir el mejor método para tus necesidades específicas.

Tabla de Contenidos

  1. strconv.Atoi()
  2. strconv.ParseInt()
  3. fmt.Sscanf()
  4. Comparación de Métodos

1. strconv.Atoi()

La función strconv.Atoi() proporciona una forma concisa de convertir una cadena base-10 a un entero. Su simplicidad la hace ideal para conversiones sencillas.


package main

import (
	"fmt"
	"strconv"
)

func main() {
	str := "12345"
	num, err := strconv.Atoi(str)
	if err != nil {
		fmt.Println("Error:", err)
	} else {
		fmt.Println("Entero:", num)
	}
}

La función devuelve tanto el entero convertido como un valor de error. Siempre verifica los errores para manejar casos donde la cadena de entrada no es un entero válido.

2. strconv.ParseInt()

Para conversiones de enteros más flexibles, strconv.ParseInt() te permite especificar la base (radix) y el tamaño de entero deseado (ej., int32, int64).


package main

import (
	"fmt"
	"strconv"
)

func main() {
	str := "1A"
	num, err := strconv.ParseInt(str, 16, 64) // Base 16, entero de 64 bits
	if err != nil {
		fmt.Println("Error:", err)
	} else {
		fmt.Println("Entero:", num)
	}

	str2 := "101101"
	num2, err := strconv.ParseInt(str2, 2, 64) // Base 2, entero de 64 bits
	if err != nil {
		fmt.Println("Error:", err)
	} else {
		fmt.Println("Entero:", num2)
	}
}

Este ejemplo demuestra la conversión de cadenas hexadecimales y binarias. El segundo argumento establece la base, y el tercero especifica el tamaño en bits del entero resultante. El manejo de errores sigue siendo crucial.

3. fmt.Sscanf()

fmt.Sscanf() ofrece un enfoque más general al análisis de cadenas, útil cuando se trata de formatos de cadenas complejos. Sin embargo, para conversiones de enteros simples, a menudo es menos eficiente que las funciones strconv.


package main

import (
	"fmt"
)

func main() {
	str := "Valor: 12345"
	var num int
	_, err := fmt.Sscanf(str, "Valor: %d", &num)
	if err != nil {
		fmt.Println("Error:", err)
	} else {
		fmt.Println("Entero:", num)
	}
}

La cadena de formato «Valor: %d» dicta cómo se analiza la cadena. %d significa un entero que se extraerá y almacenará en la variable num. Este método es potente para analizar datos estructurados, pero añade complejidad para conversiones de enteros simples.

4. Comparación de Métodos

Elegir el método correcto depende de tus necesidades específicas:

Método Soporte de Base Control de Tamaño de Bits Manejo de Errores Simplicidad Caso de Uso
strconv.Atoi() Solo Base 10 No Alta Conversiones simples base-10
strconv.ParseInt() Variable Media Base y tamaño de bits flexibles
fmt.Sscanf() Variable Baja Análisis de cadenas complejas

Para conversiones básicas base-10, strconv.Atoi() es la más simple y eficiente. strconv.ParseInt() proporciona mayor flexibilidad para diferentes bases y tamaños de enteros. fmt.Sscanf() es la mejor para extraer enteros de estructuras de cadenas más complejas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *