Comment convertir une chaîne de caractères en un nombre entier en Go

Suraj Joshi 30 janvier 2023
  1. La fonction Atoi() du paquet strconv
  2. Fonction ParseInt() du paquet strconv
  3. Méthode fmt.Sscanf
  4. Comparaison des méthodes
Comment convertir une chaîne de caractères en un nombre entier en Go

Go est la signification de la langue tapée statiquement, si nous définissons la variable comme int, elle ne peut être que int ; nous ne pouvons pas lui assigner la chaîne sans convertir le type de données de la chaîne d’une variable. Go a un paquet intégré appelé strconv qui fournit trois fonctions Atoi(), Sscanf(), et ParseInt() pour convertir la chaîne de Go en int.

La fonction Atoi() du paquet strconv

Le paquet strconv implémente des conversions vers et à partir de représentations de chaînes de caractères de types de données de base. Pour convertir une chaîne de caractères en un nombre entier, nous utilisons la fonction Atoi() du paquet strconv. Atoi signifie 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)
    }
}   

Production:

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

Si la chaîne d’entrée n’est pas au format entier, alors la fonction retourne zéro.

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)

}  

Production:

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

Fonction ParseInt() du paquet strconv

La méthode strconv.ParseInt(s, base, bitSize) interprète la chaîne d’entrée s dans la base donnée (0, 2 à 36) et la taille des bits (0 à 64) et retourne un entier correspondant. Atoi(s) est équivalent à 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))
}

Production:

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

Méthode fmt.Sscanf

fmt.Sscanf() est idéal pour analyser des chaînes de caractères personnalisées contenant un nombre. La fonction Sscanf() analyse la chaîne d’arguments, en stockant des valeurs successives séparées par des espaces dans des arguments successifs définis par le format et retourne le nombre d’éléments analysés avec succès.

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

Production:

234

Comparaison des méthodes

La méthode strconv.ParseInt() est la plus rapide de toutes, strconv.Atoi() est un peu plus lente que strconv.ParseInt() et fmt.Sscanf() est la plus lente de toutes mais la plus souple.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Article connexe - Go String