Documentation API : http://godoc.org/github.com/samuel/go-thrift
BSD à 3 clauses. Voir fichier LICENCE.
Thrift est un IDL qui peut être utilisé pour générer des liaisons client et serveur RPC pour une variété de langages. Ce package comprend les codecs client et serveur, la sérialisation et la génération de code pour Go. Il essaie d'être un mappage plus naturel avec le langage par rapport à d'autres implémentations. Par exemple, Go a déjà l’idée d’un transport d’épargne dans les interfaces ReadWriteCloser.
La plupart des types correspondent directement aux types Go natifs, mais il existe certaines bizarreries et limitations.
Go prend en charge un ensemble de types de clés de carte plus limité que Thrift
Pour utiliser un ensemble, définissez le champ comme []type et fournissez une balise "set" :
StringSet []string `thrift:"1,set"`
[]byte est codé/décodé sous forme de chaîne car le type binaire Thrift est le même que la chaîne sur le fil.
Le package standard Go net/rpc est utilisé pour fournir RPC. Cependant, une incompatibilité réside dans l'utilisation par net/rpc de ServiceName.Method pour nommer les méthodes RPC. Pour contourner ce problème, Thrift ServerCodec préfixe les noms de méthodes avec « Thrift ».
Il n'y a pas de « classes » de transport spécifiques comme c'est le cas dans la plupart des bibliothèques Thrift. Au lieu de cela, le standard io.ReadWriteCloser
est utilisé comme interface. Si la valeur implémente également l'interface thrift.Flusher, Flush() error
est appelée après protocol.WriteMessageEnd
.
Le transport encadré est pris en charge en encapsulant une valeur implémentant io.ReadWriteCloser
avec thrift.NewFramedReadWriteCloser(value)
La prise en charge des requêtes unidirectionnelles doit être activée explicitement sur le codec RPC. La raison pour laquelle elles ne sont pas autorisées par défaut est que le package Go RPC ne prend pas réellement en charge les requêtes unidirectionnelles. Pour contourner ce problème, il faut utiliser des canaux pour suivre les requêtes en attente dans le codec et simuler les réponses.
Les requêtes unidirectionnelles ne sont pas encore implémentées côté serveur.
Le sous-répertoire "parser" contient un analyseur Thrift IDL et "generator" contient un générateur de code Go. Il pourrait être étendu à d’autres langues.
Comment utiliser le générateur :
$ 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/