Documentación API: http://godoc.org/github.com/samuel/go-thrift
BSD de 3 cláusulas. Ver archivo de LICENCIA.
Thrift es un IDL que se puede utilizar para generar enlaces de cliente y servidor RPC para una variedad de idiomas. Este paquete incluye códecs de cliente y servidor, serialización y generación de código para Go. Intenta ser un mapeo más natural del lenguaje en comparación con otras implementaciones. Por ejemplo, Go ya tiene la idea de un transporte de segunda mano en las interfaces ReadWriteCloser.
La mayoría de los tipos se asignan directamente a los tipos nativos de Go, pero existen algunas peculiaridades y limitaciones.
Go admite un conjunto más limitado de tipos de claves de mapas que Thrift
Para utilizar un conjunto, defina el campo como []tipo y proporcione una etiqueta de "conjunto":
StringSet []string `thrift:"1,set"`
[]byte se codifica/decodifica como una cadena porque el tipo binario Thrift es el mismo que la cadena en el cable.
El paquete estándar Go net/rpc se utiliza para proporcionar RPC. Sin embargo, una incompatibilidad es el uso que hace net/rpc de ServiceName.Method para nombrar métodos RPC. Para evitar esto, Thrift ServerCodec antepone los nombres de los métodos con "Thrift".
No existen "clases" de transporte específicas como las que existen en la mayoría de las bibliotecas de segunda mano. En su lugar, se utiliza el estándar io.ReadWriteCloser
como interfaz. Si el valor también implementa la interfaz thrift.Flusher, entonces se llama Flush() error
después de protocol.WriteMessageEnd
.
El transporte enmarcado se admite envolviendo un valor que implementa io.ReadWriteCloser
con thrift.NewFramedReadWriteCloser(value)
La compatibilidad con solicitudes unidireccionales debe habilitarse explícitamente en el códec RPC. La razón por la que no están permitidos de forma predeterminada es porque el paquete Go RPC en realidad no admite solicitudes unidireccionales. Para solucionar esto se requiere un truco bastante extraño que consiste en usar canales para rastrear solicitudes pendientes en el códec y falsificar respuestas.
Las solicitudes unidireccionales aún no están implementadas en el lado del servidor.
El subdirectorio "parser" contiene un analizador Thrift IDL y "generator" contiene un generador de código Go. Podría ampliarse para incluir otros idiomas.
Cómo utilizar el generador:
$ 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/