Go Programming

Conversão Eficiente de String para Inteiro em Go

Spread the love

Go oferece diversos métodos eficientes para converter strings em inteiros, uma tarefa comum em vários cenários de programação. Este artigo explora três abordagens principais, destacando seus pontos fortes e fracos para ajudar você a escolher o melhor método para suas necessidades específicas.

Sumário

  1. strconv.Atoi()
  2. strconv.ParseInt()
  3. fmt.Sscanf()
  4. Comparação dos Métodos

1. strconv.Atoi()

A função strconv.Atoi() fornece uma maneira concisa de converter uma string de base-10 em um inteiro. Sua simplicidade a torna ideal para conversões diretas.


package main

import (
	"fmt"
	"strconv"
)

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

A função retorna tanto o inteiro convertido quanto um valor de erro. Sempre verifique a existência de erros para lidar com casos em que a string de entrada não é um inteiro válido.

2. strconv.ParseInt()

Para conversões de inteiros mais flexíveis, strconv.ParseInt() permite especificar a base (radix) e o tamanho inteiro desejado (por exemplo, int32, int64).


package main

import (
	"fmt"
	"strconv"
)

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

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

Este exemplo demonstra a conversão de strings hexadecimais e binárias. O segundo argumento define a base, e o terceiro especifica o tamanho em bits do inteiro resultante. O tratamento de erros continua crucial.

3. fmt.Sscanf()

fmt.Sscanf() oferece uma abordagem mais geral para análise de strings, útil ao lidar com formatos de string complexos. No entanto, para conversões de inteiros simples, geralmente é menos eficiente do que as funções 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("Erro:", err)
	} else {
		fmt.Println("Inteiro:", num)
	}
}

A string de formato “Valor: %d” dita como a string é analisada. %d significa um inteiro a ser extraído e armazenado na variável num. Este método é poderoso para analisar dados estruturados, mas adiciona complexidade para conversões de inteiros simples.

4. Comparação dos Métodos

A escolha do método certo depende de suas necessidades específicas:

Método Suporte à Base Controle de Tamanho em Bits Tratamento de Erros Simplicidade Caso de Uso
strconv.Atoi() Apenas Base 10 Não Sim Alta Conversões simples de base-10
strconv.ParseInt() Variável Sim Sim Média Base e tamanho de bits flexíveis
fmt.Sscanf() Variável Sim Sim Baixa Análise de strings complexas

Para conversões básicas de base-10, strconv.Atoi() é a mais simples e eficiente. strconv.ParseInt() oferece maior flexibilidade para diferentes bases e tamanhos de inteiros. fmt.Sscanf() é melhor para extrair inteiros de estruturas de string mais complexas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *