API-Dokumentation: http://godoc.org/github.com/samuel/go-thrift
3-Klausel-BSD. Siehe LICENSE-Datei.
Thrift ist ein IDL, mit dem RPC-Client- und Serverbindungen für eine Vielzahl von Sprachen generiert werden können. Dieses Paket umfasst Client- und Server-Codecs, Serialisierung und Codegenerierung für Go. Im Vergleich zu anderen Implementierungen wird versucht, eine natürlichere Zuordnung zur Sprache zu ermöglichen. Go hat beispielsweise bereits die Idee eines Thrift-Transports in den ReadWriteCloser-Schnittstellen.
Die meisten Typen werden direkt den nativen Go-Typen zugeordnet, es gibt jedoch einige Besonderheiten und Einschränkungen.
Go unterstützt einen begrenzteren Satz an Typen für Kartenschlüssel als Thrift
Um einen Satz zu verwenden, definieren Sie das Feld als []type und geben Sie das Tag „set“ an:
StringSet []string `thrift:"1,set"`
[]Byte wird als String kodiert/dekodiert, da der Thrift-Binärtyp mit dem String auf der Leitung identisch ist.
Zur Bereitstellung von RPC wird das Standardpaket Go net/rpc verwendet. Eine Inkompatibilität besteht jedoch darin, dass net/rpc ServiceName.Method zum Benennen von RPC-Methoden verwendet. Um dies zu umgehen, stellt der Thrift ServerCodec Methodennamen das Präfix „Thrift“ voran.
Es gibt keine spezifischen Transport-„Klassen“, wie es in den meisten Thrift-Bibliotheken der Fall ist. Stattdessen wird als Schnittstelle der Standard io.ReadWriteCloser
verwendet. Wenn der Wert auch die Schnittstelle thrift.Flusher implementiert, wird Flush() error
nach protocol.WriteMessageEnd
aufgerufen.
Der gerahmte Transport wird unterstützt, indem ein Wert io.ReadWriteCloser
implementiert, mit thrift.NewFramedReadWriteCloser(value)
umschlossen wird.
Die Unterstützung unidirektionaler Anforderungen muss explizit im RPC-Codec aktiviert werden. Der Grund dafür, dass sie standardmäßig nicht zulässig sind, liegt darin, dass das Go-RPC-Paket eigentlich keine unidirektionalen Anfragen unterstützt. Um dies zu umgehen, ist ein ziemlich umständlicher Trick erforderlich, bei dem Kanäle verwendet werden, um ausstehende Anfragen im Codec zu verfolgen und Antworten vorzutäuschen.
Einseitige Anforderungen sind auf der Serverseite noch nicht implementiert.
Das Unterverzeichnis „parser“ enthält einen Thrift IDL-Parser und „generator“ enthält einen Go-Codegenerator. Es könnte um weitere Sprachen erweitert werden.
So verwenden Sie den Generator:
$ go install github.com/samuel/go-thrift/generator
$ generator --help
Usage of generator:
-go.binarystring
Always use string for binary instead of []byte
-go.importprefix string
Prefix for Thrift-generated go package imports
-go.json.enumnum
For JSON marshal enums by number instead of name
-go.pointers
Make all fields pointers
-go.signedbytes
Interpret Thrift byte as Go signed int8 type
$ generator cassandra.thrift $GOPATH/src/