2012-04-11 20 views
266
i := 123 
s := string(i) 

s es 'E', pero lo que quiero es "123"Cómo convertir un valor int a cadena en Go?

por favor dígame cómo puedo obtener "123".

Y en Java, que pueda hacer de esta manera:

String s = "ab" + "c" // s is "abc" 

¿Cómo puedo concat dos cadenas en Ir?

Respuesta

412

Utilice la función de strconv del paquete Itoa función.

Por ejemplo:

package main 

import (
    "strconv" 
    "fmt" 
) 

func main() { 
    t := strconv.Itoa(123) 
    fmt.Println(t) 
} 

Puede concat cuerdas simplemente + 'ing ellos, o utilizando la función Join del paquete strings.

+4

Si tiene muchas concatenaciones de cadenas para hacer (por ejemplo, para construir una cadena larga) y quiere que su código sea más rápido y con menos asignaciones, debería considerar el uso de bytes.Buffer también (es una especie de versión más genérica de StringBuilder de Java). –

+9

¿Por qué los diseñadores de idiomas pensaban que las funciones crípticas nombres como "Itoa" eran preferibles a algo que podría ser un poco más descriptivo? – Luke

+4

@luke proviene del patrimonio C donde toda la máquina podría tener 256K de memoria; se sacrificó la usabilidad para que se ajuste a más funcionalidades. Los creadores de Go están profundamente arraigados en ese patrimonio y se sienten completamente cómodos con estos nombres. – Bryan

76
fmt.Sprintf("%v",value); 

Si conoce el tipo específico de valor de uso del formateador correspondiente, por ejemplo, %d para int

Más información - fmt

+7

Me gusta esta opción sin agregar bibliotecas. ¡¡¡Gracias!!! – didando8a

27

Es interesante observar que strconv.Itoa es shorthand para

func FormatInt(i int64, base int) string 

con base 10

Por ejemplo:

strconv.Itoa(123) 

es equivalente a

strconv.FormatInt(int64(123), 10) 
+0

undefined: strconv en strconv.Itoa –

+0

@FeloVilches import "strconv" – kgthegreat

21

fmt.Sprintf, strconv.Itoa y strconv.FormatInt hará el trabajo. Pero Sprintf usará el paquete reflect, y asignará un objeto más, por lo que no es una buena opción.

enter image description here

-1

Yo uso simple string(int) de Type conversion.Trate

package main 

import (
    "fmt" 
) 

func main() { 
    var i int = 1 
    fmt.Printf(" i type: %T\n", i) 
    fmt.Printf("convert: %T\n", string(i)) 
} 

>> Play

No estoy seguro sobre (y Google no muestra) posibles confusiones, pero funciona bien en todos mis proyectos.

+0

Intenta cambiar i a 80 y luego haz 'fmt.Printf (" convert:% s \ n ", string (i))'. Obtienes 'P', no' 80' –

+0

@ JørnJensen, tienes razón – vladkras