Documentação da API: http://godoc.org/github.com/samuel/go-thrift
BSD de 3 cláusulas. Consulte o arquivo LICENÇA.
Thrift é um IDL que pode ser usado para gerar ligações de cliente e servidor RPC para uma variedade de idiomas. Este pacote inclui codecs de cliente e servidor, serialização e geração de código para Go. Tenta ser um mapeamento mais natural para a linguagem em comparação com outras implementações. Por exemplo, Go já tem a ideia de um transporte econômico nas interfaces ReadWriteCloser.
A maioria dos tipos é mapeada diretamente para os tipos Go nativos, mas existem algumas peculiaridades e limitações.
Go oferece suporte a um conjunto mais limitado de tipos de chaves de mapa do que Thrift
Para usar um conjunto defina o campo como []type e forneça uma tag de "set":
StringSet []string `thrift:"1,set"`
[]byte é codificado/decodificado como uma string porque o tipo binário Thrift é o mesmo que string na conexão.
O pacote Go net/rpc padrão é usado para fornecer RPC. Embora uma incompatibilidade seja o uso de ServiceName.Method pelo net/rpc para nomear métodos RPC. Para contornar isso, o Thrift ServerCodec prefixa os nomes dos métodos com "Thrift".
Não existem "classes" de transporte específicas como existem na maioria das bibliotecas Thrift. Em vez disso, o padrão io.ReadWriteCloser
é usado como interface. Se o valor também implementar a interface thrift.Flusher, Flush() error
será chamado após protocol.WriteMessageEnd
.
O transporte emoldurado é suportado agrupando um valor implementando io.ReadWriteCloser
com thrift.NewFramedReadWriteCloser(value)
O suporte a solicitações unidirecionais precisa ser habilitado explicitamente no codec RPC. A razão pela qual eles não são permitidos por padrão é porque o pacote Go RPC não oferece suporte a solicitações unidirecionais. Para contornar isso, é necessário um hack bastante desajeitado de usar canais para rastrear solicitações pendentes no codec e respostas falsas.
As solicitações unidirecionais ainda não foram implementadas no lado do servidor.
O subdiretório "parser" contém um analisador Thrift IDL e "generator" contém um gerador de código Go. Poderia ser estendido para incluir outros idiomas.
Como usar o gerador:
$ 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/