Próbuję przekonwertować ciąg zwrócony z flag.Arg(n)
na int
. Jak idiomatyczny sposób to zrobić w Go?
string
go
type-conversion
Matt Joiner
źródło
źródło
func main() { ... }
nie przyjmuje argumentów i nie zwraca wartości. Użyj funkcjios
pakietu,Exit
np.os.Exit(2).
panic(err)
Konwertowanie prostych ciągów
Najprostszym sposobem jest użycie tej
strconv.Atoi()
funkcji.Pamiętaj, że istnieje wiele innych sposobów. Na przykład
fmt.Sscan()
istrconv.ParseInt()
które dają większą elastyczność, ponieważ można na przykład określić bazę i rozmiar bitów. Również zgodnie z dokumentacjąstrconv.Atoi()
:Oto przykład wykorzystujący wspomniane funkcje (wypróbuj na Go Playground ):
Dane wyjściowe (jeśli wywoływane z argumentem
"123"
):Analiza niestandardowych ciągów
Jest także przydatny,
fmt.Sscanf()
który daje jeszcze większą elastyczność, ponieważ w łańcuchu formatu możesz określić format liczb (np. Szerokość, podstawa itp.) Wraz z dodatkowymi dodatkowymi znakami na wejściustring
.Jest to doskonałe do analizowania niestandardowych ciągów zawierających liczbę. Na przykład, jeśli dane wejściowe są dostarczane w postaci, w
"id:00123"
której masz prefiks,"id:"
a liczba jest stała, to 5 cyfr, wypełnionych zerami, jeśli są krótsze, można to bardzo łatwo przetworzyć w następujący sposób:źródło
ParseInt
?strconv.ParseInt()
link i zobaczysz natychmiast:ParseInt(s string, base int, bitSize int)
. Jest to więc podstawa: „ParseInt interpretuje ciąg s w podanej bazie (2 do 36)”int
wymagana jest wartość typu istrconv.ParseInt()
jest ona używana, konieczna jest ręczna konwersja typu (zint64
naint
).Oto trzy sposoby przetwarzania ciągów znaków na liczby całkowite, od najszybszego środowiska uruchomieniowego do najwolniejszego:
strconv.ParseInt(...)
najszybszystrconv.Atoi(...)
wciąż bardzo szybkofmt.Sscanf(...)
nie strasznie szybki, ale najbardziej elastycznyOto test porównawczy, który pokazuje użycie i przykładowe czasy dla każdej funkcji:
Możesz go uruchomić, zapisując jako
atoi_test.go
i uruchamiającgo test -bench=. atoi_test.go
.źródło
Spróbuj tego
źródło
Jeśli kontrolujesz dane wejściowe, możesz użyć wersji mini
najszybsza opcja (w razie potrzeby wpisz czek). Wynik:
źródło