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

s è 'E', ma quello che voglio è "123"Come convertire un valore int in stringa in Go?

prego di dirmi come posso ottenere "123".

E in Java, che posso fare in questo modo:

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

come posso concat due stringhe in Go?

risposta

412

Utilizzare la funzione Itoa del pacchetto.

Ad esempio:

package main 

import (
    "strconv" 
    "fmt" 
) 

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

È possibile concat stringhe semplicemente + 'loro ing, oppure utilizzando la funzione Join del pacchetto strings.

+4

Se si dispone di un sacco di concatenazioni di stringhe (ad esempio per creare una stringa lunga) e si desidera che il codice sia più veloce e con meno allocazioni, si dovrebbe prendere in considerazione l'uso di bytes.Buffer (è una sorta di versione più generica di Java's StringBuilder). –

+9

Perché i progettisti linguistici pensano che nomi di funzioni criptici come "Itoa" fossero preferibili a qualcosa che potrebbe essere un po 'più descrittivo? – Luke

+4

@luke deriva dall'eredità C in cui l'intera macchina potrebbe avere una memoria 256K; l'usabilità è stata sacrificata per adattarsi a una maggiore funzionalità. I ​​creatori di Go sono tutti profondamente radicati in quell'eredità e si sentono completamente a proprio agio con questi nomi. – Bryan

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

Se si conosce il tipo specifico del valore d'uso corrispondente formattatore per esempio %d per int

Maggiori informazioni - fmt

+7

Mi piace questa opzione con fuori per aggiungere librerie. Grazie!!! – didando8a

27

E 'interessante notare che strconv.Itoa è shorthand per

func FormatInt(i int64, base int) string 

con base 10

Per esempio:

strconv.Itoa(123) 

è equivalente a

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

indefinito: strconv in strconv.Itoa –

+0

@FeloVilches import "strconv" – kgthegreat

21

fmt.Sprintf, strconv.Itoa e strconv.FormatInt farà il lavoro. Ma Sprintf utilizzerà il pacchetto reflect e assegnerà un altro oggetto, quindi non è una buona scelta.

enter image description here

-1

Uso semplice string(int) da Type conversion.Prova

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

Non è sicuro circa (e Google non mostra) possibili confusioni, ma funziona bene su tutti i miei progetti.

+0

Prova a cambiare da i a 80 e poi esegui 'fmt.Printf (" converti:% s \ n ", stringa (i))'. Ottieni 'P', non' 80' –

+0

@ JørnJensen, hai ragione – vladkras