web-dev-qa-db-fra.com

Comment convertir une valeur int en chaîne dans Go?

i := 123
s := string(i) 

s est 'E', mais ce que je veux, c'est "123"

S'il vous plaît dites-moi comment puis-je obtenir "123".

Et en Java, je peux faire de cette façon:

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

comment puis-je concat deux chaînes dans Go?

426
hardPass

Utilisez la fonction strconv du package Itoa .

Par exemple:

package main

import (
    "strconv"
    "fmt"
)

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

Vous pouvez concaténer des chaînes simplement en + 'ou en utilisant la fonction Join du package strings .

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

Si vous connaissez le type spécifique de valeur, utilisez le formateur correspondant, par exemple %d pour int.

Plus d'infos - fmt

127
Jasmeet Singh

Il est intéressant de noter que strconv.Itoa est en abrégé pour

func FormatInt(i int64, base int) string

avec base 10

Par exemple:

strconv.Itoa(123)

est équivalent à

strconv.FormatInt(int64(123), 10)
43
kgthegreat

fmt.Sprintf, strconv.Itoa et strconv.FormatInt feront le travail. Mais Sprintf utilisera le paquetage reflect et allouera un objet supplémentaire. Ce n'est donc pas un bon choix.

enter image description here

36
Bryce

Vous pouvez utiliser fmt.Sprintf

Voir http://play.golang.org/p/bXb1vjYbyc par exemple.

34
lazy1

Dans ce cas, strconv et fmt.Sprintf effectuent le même travail, mais l'utilisation de la fonction strconv du package Itoa est le meilleur choix, car fmt.Sprintf alloue un objet supplémentaire pendant conversion.

check the nenchmark result of both vérifiez le point de repère ici: https://Gist.github.com/evalphobia/caee1602969a640a45

voir https://play.golang.org/p/hlaz_rMa0D par exemple.

21
manigandand

Conversion de int64:

n := int64(32)
str := strconv.FormatInt(n, 10)

fmt.Println(str)
// Prints "32"
6
Cae Vecchi

ok, la plupart d'entre eux vous ont montré quelque chose de bien. Laissez-moi vous donner ceci:

// ToString Change arg to string
func ToString(arg interface{}, timeFormat ...string) string {
    if len(timeFormat) > 1 {
        log.SetFlags(log.Llongfile | log.LstdFlags)
        log.Println(errors.New(fmt.Sprintf("timeFormat's length should be one")))
    }
    var tmp = reflect.Indirect(reflect.ValueOf(arg)).Interface()
    switch v := tmp.(type) {
    case int:
        return strconv.Itoa(v)
    case int8:
        return strconv.FormatInt(int64(v), 10)
    case int16:
        return strconv.FormatInt(int64(v), 10)
    case int32:
        return strconv.FormatInt(int64(v), 10)
    case int64:
        return strconv.FormatInt(v, 10)
    case string:
        return v
    case float32:
        return strconv.FormatFloat(float64(v), 'f', -1, 32)
    case float64:
        return strconv.FormatFloat(v, 'f', -1, 64)
    case time.Time:
        if len(timeFormat) == 1 {
            return v.Format(timeFormat[0])
        }
        return v.Format("2006-01-02 15:04:05")
    case jsoncrack.Time:
        if len(timeFormat) == 1 {
            return v.Time().Format(timeFormat[0])
        }
        return v.Time().Format("2006-01-02 15:04:05")
    case fmt.Stringer:
        return v.String()
    case reflect.Value:
        return ToString(v.Interface(), timeFormat...)
    default:
        return ""
    }
}
1
fwhez
package main

import (
    "fmt" 
    "strconv"
)

func main(){
//First question: how to get int string?

    intValue := 123
    // keeping it in separate variable : 
    strValue := strconv.Itoa(intValue) 
    fmt.Println(strValue)

//Second question: how to concat two strings?

    firstStr := "ab"
    secondStr := "c"
    s := firstStr + secondStr
    fmt.Println(s)
}
0
Sagiruddin Mondal