2012-12-16 26 views
5

Teraz jestem w następujący sposób, aby przeanalizować liczbę całkowitą z łańcucha, a następnie przekształcić go do int typu:Szukam elegancki sposób do analizowania liczbą całkowitą

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

Jest to dość rozwlekły, a na pewno nie jest ładna, ponieważ nie znalazłem sposobu na konwersję w rozmowie ParseInt. Czy jest lepszy sposób na zrobienie tego?

Odpowiedz

5

Wygląda na to, że funkcja strconv.Atoi robi to, co chcesz, poza tym, że działa niezależnie od rozmiaru bitowego int (twój kod wydaje się zakładać, że ma szerokość 64 bitów).

3

Jeśli musisz napisać to raz w swoim programie, nie widzę problemu. Jeśli potrzebujesz w kilku miejscach można napisać prosty specjalizacji opakowania, na przykład:

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

Standardowa biblioteka nie ma na celu dostarczyć (nadęty) API dla każdego możliwego typu liczbowego i/lub ich kombinacje.

+0

Pozwoliłem sobie z wyjęciem 'base' argument, który nie był używany. W przeciwnym razie +1. –

+0

Och, poprawne. Dzięki! ;-) – zzzz

+0

Właściwie, punkt dotyczący "nadęty API" jest trochę niecelny, ponieważ ten szczególny przypadek * jest * objęty przez "strconv.Atoi". –

2

Nie zapomnij sprawdzić błędów. Na przykład,

package main 

import (
    "fmt" 
    "strconv" 
) 

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

wyjściowa:

123 
Powiązane problemy