Converti stringa in tipo intero in Go

Suraj Joshi 30 gennaio 2023
  1. Funzione Atoi() dal pacchetto strconv
  2. Funzione ParseInt() dal pacchetto strconv
  3. Metodo fmt.Sscanf
  4. Confronto dei metodi
Converti stringa in tipo intero in Go

Go è il significato del linguaggio tipizzato staticamente se definiamo la variabile come int, può essere solo int; non possiamo assegnargli la stringa senza convertire il tipo di dati stringa di una variabile. Go ha un pacchetto integrato chiamato strconv che fornisce tre funzioni Atoi(), Sscanf() e ParseInt() per convertire la stringa Go in int.

Funzione Atoi() dal pacchetto strconv

Il pacchetto strconv implementa conversioni da e verso rappresentazioni di stringhe di tipi di dati di base. Per convertire una stringa in un numero intero, usiamo la funzione Atoi() dal pacchetto strconv. Atoi sta per 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)
    }
}   

Produzione:

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

Se la stringa di input non è nel formato intero, la funzione restituisce 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)

}  

Produzione:

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

Funzione ParseInt() dal pacchetto strconv

Il metodo strconv.ParseInt(s, base, bitSize) interpreta la stringa di input s nella base (da 0, 2 a 36) e nella dimensione in bit (da 0 a 64) e restituisce un numero intero corrispondente. 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))
}

Produzione:

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

Metodo fmt.Sscanf

fmt.Sscanf() è ottimo per analizzare stringhe personalizzate contenenti un numero. La funzione Sscanf() analizza la stringa dell’argomento, memorizzando i valori separati da spazi successivi in ​​argomenti successivi come definito dal formato e restituisce il numero di elementi analizzati con successo.

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

Produzione:

234

Confronto dei metodi

strconv.ParseInt() è il più veloce di tutti i metodi, strconv.Atoi() è un po’ più lento di strconv.ParseInt() e fmt.Sscanf() è il più lento di tutti ma il metodo più flessibile.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Articolo correlato - Go String