Estou tentando converter uma string retornada de flag.Arg(n)
para uma int
. Qual é a maneira idiomática de fazer isso no Go?
string
go
type-conversion
Matt Joiner
fonte
fonte
func main() { ... }
não aceita argumentos e não retorna valor. Use a funçãoos
packageExit
, por exemplo:os.Exit(2).
panic(err)
Convertendo cadeias simples
A maneira mais fácil é usar a
strconv.Atoi()
função.Observe que existem muitas outras maneiras. Por exemplo,
fmt.Sscan()
estrconv.ParseInt()
que oferecem maior flexibilidade, você pode especificar a base e o tamanho de bits, por exemplo. Também conforme observado na documentação destrconv.Atoi()
:Aqui está um exemplo usando as funções mencionadas (experimente no Go Playground ):
Saída (se chamada com argumento
"123"
):Analisando strings personalizadas
Há também um recurso útil
fmt.Sscanf()
que oferece flexibilidade ainda maior, pois, com a sequência de formatação, você pode especificar o formato numérico (como largura, base etc.) junto com caracteres extras adicionais na entradastring
.Isso é ótimo para analisar seqüências personalizadas mantendo um número. Por exemplo, se sua entrada é fornecida em uma forma em
"id:00123"
que você tem um prefixo"id:"
e o número é fixado em 5 dígitos, preenchido com zeros se for menor, isso é muito facilmente analisável assim:fonte
ParseInt
especifica?strconv.ParseInt()
link e você verá imediatamente:ParseInt(s string, base int, bitSize int)
. Portanto, é a base: "ParseInt interpreta uma string s na base fornecida (2 a 36)"int
for necessário estrconv.ParseInt()
for usado, será necessária a conversão manual do tipo (deint64
paraint
).Aqui estão três maneiras de analisar seqüências de caracteres em números inteiros, do tempo de execução mais rápido ao mais lento:
strconv.ParseInt(...)
o mais rápidostrconv.Atoi(...)
ainda muito rápidofmt.Sscanf(...)
não terrivelmente rápido, mas mais flexívelAqui está uma referência que mostra o tempo de uso e exemplo para cada função:
Você pode executá-lo salvando como
atoi_test.go
e executandogo test -bench=. atoi_test.go
.fonte
Tente isto
fonte
Se você controlar os dados de entrada, poderá usar a mini versão
a opção mais rápida (faça seu cheque, se necessário). Resultado:
fonte