J'essaie de convertir une chaîne renvoyée par flag.Arg(n)
un int
. Quelle est la façon idiomatique de le faire dans Go?
string
go
type-conversion
Matt Joiner
la source
la source
func main() { ... }
ne prend aucun argument et ne renvoie aucune valeur. Utilisez la fonction deos
packageExit
par exempleos.Exit(2).
panic(err)
Conversion de chaînes simples
La façon la plus simple est d'utiliser la
strconv.Atoi()
fonction.Notez qu'il existe de nombreuses autres façons. Par exemple
fmt.Sscan()
etstrconv.ParseInt()
qui offrent une plus grande flexibilité car vous pouvez spécifier la base et la taille des bits par exemple. Aussi, comme indiqué dans la documentation destrconv.Atoi()
:Voici un exemple utilisant les fonctions mentionnées (essayez-le sur le Go Playground ):
Sortie (si appelée avec argument
"123"
):Analyse de chaînes personnalisées
Il y a aussi un
fmt.Sscanf()
qui donne encore plus de flexibilité car avec la chaîne de format, vous pouvez spécifier le format numérique (comme la largeur, la base, etc.) ainsi que des caractères supplémentaires supplémentaires dans l'entréestring
.C'est idéal pour analyser des chaînes personnalisées contenant un nombre. Par exemple, si votre entrée est fournie sous la forme d'
"id:00123"
un préfixe"id:"
et que le nombre est fixé à 5 chiffres, complété par des zéros si plus court, c'est très facilement analysable comme ceci:la source
ParseInt
préciser?strconv.ParseInt()
lien et vous verrez immédiatement:ParseInt(s string, base int, bitSize int)
. C'est donc la base: "ParseInt interprète une chaîne s dans la base donnée (2 à 36)"int
est requise etstrconv.ParseInt()
utilisée, une conversion de type manuelle est nécessaire (deint64
àint
).Voici trois façons d'analyser des chaînes en nombres entiers, de l'exécution la plus rapide à la plus lente:
strconv.ParseInt(...)
le plus rapidestrconv.Atoi(...)
toujours très rapidefmt.Sscanf(...)
pas terriblement rapide mais plus flexibleVoici un benchmark qui montre l'utilisation et un exemple de synchronisation pour chaque fonction:
Vous pouvez l'exécuter en enregistrant sous
atoi_test.go
et en exécutantgo test -bench=. atoi_test.go
.la source
Essaye ça
la source
Si vous contrôlez les données d'entrée, vous pouvez utiliser la mini version
l'option la plus rapide (écrivez votre chèque si nécessaire). Résultat :
la source