API 文档:http://godoc.org/github.com/samuel/go-thrift
3 子句 BSD。请参阅许可证文件。
Thrift 是一种 IDL,可用于生成多种语言的 RPC 客户端和服务器绑定。该软件包包括 Go 的客户端和服务器编解码器、序列化和代码生成。与其他实现相比,它试图成为更自然的语言映射。例如,Go 已经在 ReadWriteCloser 接口中提出了节俭传输的想法。
大多数类型直接映射到原生 Go 类型,但存在一些怪癖和限制。
Go 比 Thrift 支持更有限的映射键类型集
要使用集合,请将字段定义为 [] 类型并提供“集合”标签:
StringSet []string `thrift:"1,set"`
[]byte 被编码/解码为字符串,因为 Thrift 二进制类型与线路上的字符串相同。
标准的Go net/rpc包用于提供RPC。不过,其中一个不兼容性是 net/rpc 使用 ServiceName.Method 来命名 RPC 方法。为了解决这个问题,Thrift ServerCodec 在方法名称中添加了“Thrift”前缀。
大多数 Thrift 库中没有特定的传输“类”。相反,使用标准io.ReadWriteCloser
作为接口。如果该值还实现了 thrift.Flusher 接口,则在protocol.WriteMessageEnd
之后调用Flush() error
。
通过使用thrift.NewFramedReadWriteCloser(value)
包装实现io.ReadWriteCloser
值来支持帧传输
需要在 RPC 编解码器上显式启用单向请求支持。默认情况下不允许它们的原因是 Go RPC 包实际上并不支持单向请求。要解决这个问题,需要使用通道来跟踪编解码器中的待处理请求并伪造响应,这需要相当简单的技巧。
单向请求尚未在服务器端实现。
“parser”子目录包含 Thrift IDL 解析器,“generator”包含 Go 代码生成器。它可以扩展到包括其他语言。
发电机使用方法:
$ 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/