Ich verwende docopt , um Befehlszeilenargumente zu analysieren. Dies funktioniert und führt zu einer Karte, wie z
map[<host>:www.google.de <port>:80 --help:false --version:false]
Jetzt möchte ich den host
und den port
Wert zu einem String mit einem Doppelpunkt zwischen den beiden Werten verketten . Grundsätzlich etwas wie:
host := arguments["<host>"] + ":" + arguments["<port>"]
Leider funktioniert das nicht, da ich die Fehlermeldung bekomme:
ungültige Operation: Argumente [""] + ":" (nicht übereinstimmende Typenschnittstelle {} und Zeichenfolge)
Also muss ich natürlich den Wert, den ich von der Karte bekomme (was einfach ist interface{}
, damit es alles sein kann), in eine Zeichenfolge konvertieren . Meine Frage ist nun, wie mache ich das?
Antworten:
Sie müssen hinzufügen Typ Behauptung
.(string)
. Dies ist erforderlich, da die Karte vom Typ istmap[string]interface{}
:Die neueste Version von Docopt gibt ein Opts- Objekt mit Konvertierungsmethoden zurück:
quelle
Sie müssen keine Typzusicherung verwenden, sondern verwenden einfach den
%v
Formatbezeichner mitSprintf
:quelle
Um das zu erweitern, was Peter gesagt hat: Da Sie von der Schnittstelle {} zur Zeichenfolge wechseln möchten, führt die Typzusicherung zu Kopfschmerzen, da Sie mehrere eingehende Typen berücksichtigen müssen. Sie müssen jeden möglichen Typ bestätigen und überprüfen, ob es sich um diesen Typ handelt, bevor Sie ihn verwenden.
Die Verwendung von fmt.Sprintf ( https://golang.org/pkg/fmt/#Sprintf ) übernimmt automatisch die Schnittstellenkonvertierung. Da Sie wissen, dass Ihr gewünschter Ausgabetyp immer eine Zeichenfolge ist, verarbeitet Sprintf jeden Typ, der sich hinter der Schnittstelle befindet, ohne zusätzlichen Code in Ihrem Namen.
quelle