Comment convertir l’interface {} en chaîne?

J’utilise docopt pour parsingr les arguments de ligne de commande. Cela fonctionne, et il en résulte une carte, telle que

map[:www.google.de :80 --help:false --version:false] 

Maintenant, je voudrais concaténer l’ host et la valeur du port en une chaîne avec un deux-points entre les deux valeurs. En gros, quelque chose comme:

 host := arguments[""] + ":" + arguments[""] 

Malheureusement, cela ne fonctionne pas, car je reçois le message d’erreur:

opération invalide: arguments [“”] + “:” (types incompatibles interface {} et chaîne)

Donc, évidemment, je dois convertir la valeur que je tire de la carte (qui est juste l’ interface{} , donc ça peut être n’importe quoi) en une chaîne. Maintenant, ma question est, comment puis-je faire cela?

Vous devez append une assertion de type .(ssortingng) . C’est nécessaire car la carte est de type map[ssortingng]interface{} :

 host := arguments[""].(ssortingng) + ":" + arguments[""].(ssortingng) 

Vous n’avez pas besoin d’utiliser une assertion de type, mais utilisez simplement le spécificateur de format %v avec Sprintf :

 hostAndPort := fmt.Sprintf("%v:%v", arguments[""], arguments[""]) 

Pour développer ce que Peter a dit: Puisque vous cherchez à passer de l’interface {} à la chaîne, l’affirmation de type entraînera des problèmes puisque vous devez tenir compte de plusieurs types entrants. Vous devrez affirmer chaque type possible et vérifier qu’il s’agit bien de ce type avant de l’utiliser.

Utiliser fmt.Sprintf ( https://golang.org/pkg/fmt/#Sprintf ) gère automatiquement la conversion de l’interface. Comme vous savez que le type de sortie souhaité est toujours une chaîne, Sprintf gère tout type qui se trouve derrière l’interface sans un tas de code supplémentaire pour vous.