Como Converter strings em Tipo Inteiro em Go

  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

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.

Artigo relacionado - Go String

  • Como analisar a seqüência de datas em Go