Документация API: http://godoc.org/github.com/samuel/go-thrift.
3-пунктный BSD. См. файл ЛИЦЕНЗИИ.
Thrift — это IDL, который можно использовать для создания привязок клиента и сервера RPC для различных языков. Этот пакет включает клиентские и серверные кодеки, сериализацию и генерацию кода для Go. Он пытается быть более естественным отображением языка по сравнению с другими реализациями. Например, в Go уже есть идея экономичного транспорта в интерфейсах ReadWriteCloser.
Большинство типов напрямую соответствуют собственным типам Go, но есть некоторые особенности и ограничения.
Go поддерживает более ограниченный набор типов ключей карты, чем Thrift.
Чтобы использовать набор, определите поле как тип [] и укажите тег «set»:
StringSet []string `thrift:"1,set"`
[]байт кодируется/декодируется как строка, поскольку двоичный тип Thrift такой же, как и строка в сети.
Для обеспечения RPC используется стандартный пакет Go net/rpc. Однако есть одна несовместимость — использование net/rpc ServiceName.Method для именования методов RPC. Чтобы обойти эту проблему, Thrift ServerCodec добавляет к именам методов префикс «Thrift».
Здесь нет конкретных транспортных «классов», которые есть в большинстве библиотек Thrift. Вместо этого в качестве интерфейса используется стандартный io.ReadWriteCloser
. Если значение также реализует интерфейс thrift.Flusher, то Flush() error
вызывается после protocol.WriteMessageEnd
.
Кадровый транспорт поддерживается путем переноса значения, реализующего io.ReadWriteCloser
, с помощью thrift.NewFramedReadWriteCloser(value)
Поддержка односторонних запросов должна быть явно включена в кодеке RPC. Причина, по которой они не разрешены по умолчанию, заключается в том, что пакет Go RPC фактически не поддерживает односторонние запросы. Чтобы обойти это, требуется довольно хитрый способ использования каналов для отслеживания ожидающих запросов в кодеке и подделки ответов.
Односторонние запросы еще не реализованы на стороне сервера.
Подкаталог «parser» содержит анализатор IDL Thrift, а «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/