2016-06-16 8 views
1

Der Server, mit dem ich in Kontakt bin, ist in Python und Ausnahmen bencoded Liste geschrieben.Python bencoded Liste entspricht in Golang

In meinem vorhandenen Python-Client-Code kann ich so etwas wie dieses:

>>> import bencode 
>>> data = [4456, 'Rakesh', 27] 
>>> bdata = bencode.bencode(data) 
>>> bdata 
'li4456e6:Rakeshi27ee' 

Server wird durch die Liste zurück:

>>> bencode.bdecode(bdata) 
[4456, 'Rakesh', 27] 

Wie kann ich den Client-Teil in golang erreichen? Ich weiß, dass es Bencode-Pakete bereits geschrieben, aber der Trick hier ist, wie komme ich zu 'li4456e6: Rakeshi27ee' in Golang durch Bereitstellung einer Sequenz von Elementen von 'verschiedenen Datentypen', so dass wenn Server (in Python geschrieben) bdecode , es kommt wieder Liste [4456, 'Rakesh', 27].

Ich schreibe nur den Client in Golang und möchte nichts auf der Serverseite ändern.

+2

Was haben Sie versucht? Es scheint ziemlich einfach zu sein, einem der zu kodierenden Bencode-Pakete eine Scheibe von Werten zu geben. – JimB

Antwort

2

Dies scheint zu tun, was Sie wollen:

package main 

import "fmt" 
import "bytes" 
import "log" 

import bencode "github.com/jackpal/bencode-go" 

func main() { 
    a := []interface{}{4456, "Rakesh", 27} 

    var buf bytes.Buffer 

    err := bencode.Marshal(&buf, a) 
    if err != nil { 
     log.Fatal(err) 
    } 

    fmt.Println(buf.String()) 
} 

Ausgang:

li4456e6:Rakeshi27ee 
+1

Danke smarx. Neu in golang gedachte Schnittstellen wird nur für eine Reihe von Methodensignaturen verwendet. –