2017-09-27 3 views
0

Je me demandais comment ajouter une valeur entière à une valeur de type "10". Je sais que je peux accomplir ceci en convertissant le string en un int d'abord et puis après avoir ajouté l'entier je peux le convertir en string. Mais puis-je accomplir cela dans une seule déclaration à Golang. Par exemple, je peux le faire avec plusieurs lignes comme celle-ci:Ajout d'une valeur entière à une chaîne sur une seule instruction

i, err := strconv.Atoi("10") 
// handle error 
i = i + 5 
s := strconv.Itoa(i) 

Mais est-il possible que je puisse accomplir cela en une seule déclaration?

Répondre

7

Il n'y a pas de fonction prête dans la bibliothèque standard pour ce que vous voulez faire. Et la raison en est que l'ajout d'un nombre à un nombre disponible comme string et ayant le résultat comme un autre string est (terriblement) inefficace. Le modèle (représentation de la mémoire) du type string ne supporte pas l'ajout de nombres efficacement (sans compter que les valeurs string sont immuables, il faut en créer une nouvelle); le modèle de mémoire de int supporte l'ajout efficace par exemple (et les CPU ont aussi des opérations directes pour cela). Personne ne veut ajouter int s aux numéros stockés en tant que valeurs string. Si vous voulez ajouter des numéros, préparez vos numéros comme ça: les chiffres. Lorsque vous souhaitez imprimer ou transmettre, convertissez-le en string (si vous le souhaitez).

Mais tout devient une déclaration unique si vous avez un prêt util fonction pour elle:

func add(s string, n int) (string, error) { 
    i, err := strconv.Atoi(s) 
    if err != nil { 
     return "", err 
    } 
    return strconv.Itoa(i + n), nil 
} 

Son utilisation:

s, err := add("10", 5) 
fmt.Println(s, err) 

sortie (essayez le Go Playground):

15 <nil>