Como Converter strings em Tipo Inteiro em Go

Suraj Joshi 30 janeiro 2023
  1. Atoi() Função do pacote strconv
  2. ParseInt() Função do pacote strconv
  3. fmt.Sscanf Método
  4. Comparação de métodos
Como Converter strings em Tipo Inteiro em Go

Go é a linguagem estaticamente digitada que significa se definirmos a variável como int, ela só pode ser int; não podemos atribuir o string a ela sem converter o tipo de dados string de uma variável. Go tem um pacote embutido chamado strconv que fornece três funções Atoi(), Sscanf(), e ParseInt() para converter a string de Go para int.

Atoi() Função do pacote strconv

O pacote strconv implementa conversões de e para representações de strings de tipos de dados básicos. Para converter uma string em um número inteiro, utilizamos a função Atoi() do pacote strconv. Atoi significa ASCII to integer.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    age := "13"
    fmt.Printf("Datatype of age before conversion : %T\n", age)
    fmt.Println("After Conversion:")
    if sv, err := strconv.Atoi(age); err == nil {
        fmt.Printf("%T, %v\n", sv, sv)
    }
}   

Resultado:

Datatype of age before conversion : string
After Conversion:
int, 13

Se a string de entrada não estiver no formato inteiro, então a função retorna zero.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    age := "abc"
    fmt.Printf("Datatype of age before conversion : %T\n", age)
    fmt.Println("After Conversion:")
    sv, _ := strconv.Atoi(age)

    fmt.Printf("%T, %v\n", sv, sv)

}  

Resultado:

Datatype of age before conversion : string
After Conversion:
int, 0

ParseInt() Função do pacote strconv

O método strconv.ParseInt(s, base, bitSize) interpreta a string de entrada s na base dada (0, 2 a 36) e tamanho de bit (0 a 64) e retorna um número inteiro correspondente. Atoi(s) é equivalente a ParseInt(s, 10, 0).

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    x := "123"
    fmt.Println("Value of x before conversion: ", x)
    fmt.Println("Datatype of x before conversion:", reflect.TypeOf(x))
    intStr, _ := strconv.ParseInt(x, 10, 64)
    fmt.Println("Value after conversion: ", intStr)
    fmt.Println("Datatype after conversion:", reflect.TypeOf(intStr))
}

Resultado:

Value of x before conversion:  123
Datatype of x before conversion: string
Value after conversion:  123
Datatype after conversion: int64

fmt.Sscanf Método

O fmt.Sscanf() é ótimo para a análise de strings personalizadas com um número. A função fmt.Sscanf() escaneia a string de argumentos, armazenando sucessivos valores separados por espaço em sucessivos argumentos conforme definido pelo formato e retorna o número de itens analisados com sucesso.

package main

import (
    "fmt"
)

func main() {
    s := "id:00234"

    var i int
    if _, err := fmt.Sscanf(s, "id:%5d", &i); err == nil {
        fmt.Println(i)
    }
} 

Resultado:

234

Comparação de métodos

O strconv.ParseInt() é o mais rápido de todos os métodos, o strconv.Atoi() é um pouco mais lento que o strconv.ParseInt() e o fmt.Sscanf() é o método mais lento de todos, exceto o mais flexível.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artigo relacionado - Go String