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/