一、mac下安装
brew update
brew install thrift
执行thrift -version,显示thrift版本,则安装成功
执行thrift -help,会看到帮助文档
二、idl定义
主要关注namespace、struct结构、支持的数据类型以及service。
具体可参考https://my.oschina.net/helight/blog/195015
例子, 文件Cityinfo.thrift:
namespace go city.genCode
struct Cityinfo {
///< 城市id
1: required i32 cityid;
///< 城市名称
2: required string city_desc;
///< 区域id
3: required i32 countyid;
///< 区域名称
4: required string county_desc;
///< 国家id
5: optional i32 countryid;
///< 国家名称
6: optional string country_desc;
}
service CityService {
///< 批量根据uid查cid 最多支持50个
CityInfo GetCityInfo(1:i64 cityId);
}
namespace中go指定生成go代码,cityCell.genCode指定go的package。
三、生成代码
thrift -out dir(生成代码的存放路径) -r --gen go idl(定义idl文件路径)
-out参数可以把生成的代码放到指定的目录下,否则默认是在当前目录新建一个gen-code目录,然后按namespace在gen-code目录下生成目录和代码。
如用上面的idl,生成代码命令的例子:
thrift -out /usr/gopath/src -r --gen go ./idl/Cityinfo.thrift
生成代码路径是:/usr/gopath/src/city/genCode/Cityinfo.go,genCode下还有其他一些文件和目录。
四、客户端调用
首先需要声明并初始化transportFactory、protocolFactory和transport:
transportFactory := thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())
protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
tSocket, err := thrift.NewTSocket(net.JoinHostPort(HOST, PORT))
transport, err := transportFactory.GetTransport(tSocket)
HOST和PORT是服务端地址和端口号。声明并初始化client
iprot := protocolFactory.GetProtocol(transport)
oprot := protocolFactory.GetProtocol(transport)
client := genCode.NewCityServiceClient(thrift.NewTStandardClient(iprot, oprot))调用服务
cityId := 10000
defaultCtx := context.Background()
resp, err := client.GetCityInfo(defaultCtx, cityId)