Cómo convertir una cadena a un tipo entero en Go

  1. Atoi() función del paquete strconv
  2. La función PareInt() del paquete strconv
  3. Método fmt.Sscanf
  4. Comparación de métodos

Go es el significado del lenguaje estático si definimos la variable como int, sólo puede ser int; no podemos asignarle la cadena sin convertir el tipo de datos de la cadena de una variable. Go tiene un paquete incorporado llamado strconv que proporciona tres funciones Atoi(), Sscanf(), y PareInt() para convertir la cadena Go en int.

Atoi() función del paquete strconv

El paquete strconv implementa conversiones a y desde representaciones de cadenas de tipos de datos básicos. Para convertir una cadena en un número entero, usamos la función Atoi() del paquete 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)
    }
}   

Producción:

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

Si la cadena de entrada no está en formato de entero, entonces la función devuelve cero.

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)

}  

Producción:

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

La función PareInt() del paquete strconv

El método strconv.ParseInt(s, base, bitSize) interpreta la cadena de entrada s en la base dada (0, 2 a 36) y el tamaño del bit (0 a 64) y devuelve un entero correspondiente. Atoi(s) es equivalente a PareInt(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))
}

Producción:

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

Método fmt.Sscanf

fmt.Sscanf es genial para analizar cadenas personalizadas que contengan un número. La función Sscanf() escanea la cadena de argumentos, almacenando valores sucesivos separados por el espacio en argumentos sucesivos definidos por el formato y devuelve el número de elementos analizados con éxito.

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)
    }
} 

Producción:

234

Comparación de métodos

El strconv.ParseInt() es el más rápido de todos los métodos, strconv.Atoi() es un poco más lento que strconv.ParseInt() y fmt.Sscanf() es el más lento de todos pero el más flexible.

Artículo relacionado - Go Strings

  • ¿Cómo convertir un valor int en cadena en Go?
  • comments powered by Disqus