API ドキュメント: http://godoc.org/github.com/samuel/go-thrift
3 節 BSD。 LICENSE ファイルを参照してください。
Thrift は、さまざまな言語の RPC クライアントとサーバーのバインディングを生成するために使用できる IDL です。このパッケージには、クライアントおよびサーバーのコーデック、シリアル化、Go 用のコード生成が含まれています。他の実装と比較して、言語へのより自然なマッピングを試みます。たとえば、Go は ReadWriteCloser インターフェイスでの節約トランスポートのアイデアをすでに持っています。
ほとんどの型はネイティブ Go 型に直接マッピングされますが、いくつかの癖や制限があります。
Go は、Thrift よりも限定されたマップ キーのタイプのセットをサポートします
セットを使用するには、フィールドを []type として定義し、「set」のタグを指定します。
StringSet []string `thrift:"1,set"`
Thrift バイナリ型はネットワーク上の文字列と同じであるため、[]byte は文字列としてエンコード/デコードされます。
RPC を提供するには、標準の Go net/rpc パッケージが使用されます。ただし、非互換性の 1 つは、net/rpc が RPC メソッドの名前付けに ServiceName.Method を使用していることです。これを回避するために、Thrift ServerCodec はメソッド名に「Thrift」という接頭辞を付けます。
ほとんどの Thrift ライブラリにあるような、特定のトランスポート「クラス」はありません。代わりに、標準のio.ReadWriteCloser
がインターフェイスとして使用されます。値が thrift.Flusher インターフェイスも実装している場合は、 protocol.WriteMessageEnd
の後にFlush() error
が呼び出されます。
フレーム化されたトランスポートは、 io.ReadWriteCloser
実装する値をthrift.NewFramedReadWriteCloser(value)
でラップすることでサポートされます。
一方向要求のサポートは、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/