2012-12-16 16 views
5

In questo momento sto facendo quanto segue al fine di analizzare un numero intero da una stringa e quindi convertirlo in int Tipo:ricerca di un modo elegante per analizzare un intero

tmpValue, _ := strconv.ParseInt(str, 10, 64) //returns int64 
finalValue = int(tmpValue) 

È abbastanza prolisso, e sicuramente non carina, dal momento che non ho trovato un modo per fare la conversione nella chiamata ParseInt. C'è un modo migliore per farlo?

risposta

5

Sembra che la funzione strconv.Atoi faccia ciò che si desidera, eccetto che funziona indipendentemente dalla dimensione del bit di int (il codice sembra assumere che sia largo 64 bit).

3

Se è necessario scriverlo una volta nel programma, non vedo alcun problema. Se avete bisogno in diversi posti si può scrivere un semplice involucro di specializzazione, ad esempio:

func parseInt(s string) (int, error) { 
     i, err := strconv.ParseInt(str, 10, 32) // or 64 on 64bit tip 
     return int(i), err 
} 

La libreria standard non si propone di fornire le API (gonfio) per ogni tipo numerico possibile e/o loro combinazioni.

+0

mi sono permesso di rimuovere l'argomento 'base', che non è stato utilizzato. Altrimenti, +1. –

+0

Oh, corretto. Grazie! ;-) – zzzz

+0

In realtà, il punto relativo alle "API gonfiate" è un po 'off, poiché questo caso particolare * è * coperto da 'strconv.Atoi'. –

2

Non dimenticare di verificare la presenza di errori. Ad esempio,

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 
    s := "123" 
    i, err := strconv.Atoi(s) 
    if err != nil { 
     fmt.Println(err) 
     return 
    } 
    fmt.Println(i) 
} 

uscita:

123 
Problemi correlati