Estoy tratando de convertir una cadena devuelta de flag.Arg(n)
a un int
. ¿Cuál es la forma idiomática de hacer esto en Go?
string
go
type-conversion
Matt Joiner
fuente
fuente
func main() { ... }
no toma argumentos y no devuelve ningún valor. Utilice la función deos
paqueteExit
, pos.Exit(2).
panic(err)
Convertir cadenas simples
La forma más fácil es usar la
strconv.Atoi()
función.Tenga en cuenta que hay muchas otras formas. Por ejemplo,
fmt.Sscan()
ystrconv.ParseInt()
que dan una mayor flexibilidad, ya que puede especificar la base y el tamaño de bits, por ejemplo. También como se señala en la documentación destrconv.Atoi()
:Aquí hay un ejemplo usando las funciones mencionadas (pruébelo en Go Playground ):
Salida (si se llama con argumento
"123"
):Analizando cadenas personalizadas
También hay una práctica
fmt.Sscanf()
que brinda una flexibilidad aún mayor, ya que con la cadena de formato puede especificar el formato de número (como ancho, base, etc.) junto con caracteres adicionales adicionales en la entradastring
.Esto es ideal para analizar cadenas personalizadas que contienen un número. Por ejemplo, si su entrada se proporciona en una forma
"id:00123"
en la que tiene un prefijo"id:"
y el número está fijado en 5 dígitos, rellenado con ceros si es más corto, esto es muy fácil de analizar de esta manera:fuente
ParseInt
especificar?strconv.ParseInt()
enlace y verá de inmediato:ParseInt(s string, base int, bitSize int)
. Entonces es la base: "ParseInt interpreta una cadena s en la base dada (2 a 36)"int
se requiere ystrconv.ParseInt()
se usa un valor de tipo, se necesita la conversión manual de tipo (deint64
aint
).Aquí hay tres formas de analizar cadenas en enteros, desde el tiempo de ejecución más rápido hasta el más lento:
strconv.ParseInt(...)
lo más rápidostrconv.Atoi(...)
todavía muy rápidofmt.Sscanf(...)
no es terriblemente rápido pero es más flexibleAquí hay un punto de referencia que muestra el uso y el tiempo de ejemplo para cada función:
Puede ejecutarlo guardando como
atoi_test.go
y ejecutándologo test -bench=. atoi_test.go
.fuente
Prueba esto
fuente
Si controla los datos de entrada, puede usar la versión mini
La opción más rápida (escriba su cheque si es necesario). Resultado:
fuente