2010/3/26追記:Goのrelease.2011-03-07.1とThriftのr1085676だとコンパイル通らなくなってる。たぶんGoの文法が(また)変わったのが原因。
Go用にコードを生成するthrift4goがThrift本体に取り込まれたので、早速それをCassandraとの連携で試してみることにする。試したのはThriftのr1075010。
Thriftのビルド
何はともあれThriftをビルドしないことにははじまらないので、SVNからソースを落としてきてビルドする。
$ svn co http://svn.apache.org/repos/asf/thrift/trunk thrift $ cd thrift $ ./bootstrap.sh $ ./configure --with-go --with-cpp --without-java --without-php --without-python --without-erlang $ make -j2 $ sudo make install $ cd lib/go $ make && make install
注意点としては、なぜか単純にconfigure -> make -> make installしただけではGo用のライブラリがビルドされないので、手動でGoのライブラリをmake installしないといけないこと。これは単にconfigureスクリプトまわりのバグか、自分のやり方が悪いかのどっちかだけどとりあえず放置して先に進む。
ちなみに、Goのライブラリをインストールすると$GOROOT/pkg/linux_386/といった場所(このパスは環境に依存する)にthrift.aという名前でライブラリのバイナリが配置される。ここに配置されることによって、Goのプログラムから'import "thrift"'という感じでパッケージのインポートができるようになるけど、もしこのパスに置かずに直接インポートしようと思ったらthrift.aへのパスを明示的に指定しないといけない。
- $GOROOT/pkg/linux_386/にthrift.aがある場合
- $GOROOT/pkg/linux_386/以外の場所(例えばプログラムと同じディレクトリ)にthrift.aがある場合
package main
import (
"thrift"
)
...
package main
import (
"./thrift"
)
...
ThriftによるCassandraコードの生成
Thriftのビルドとインストールは終わったので、今度はCassandraのインタフェース定義からGoのコードを生成してもらって、コンパイルする。
$ thrift --gen go ~/lib/cassandra/interface/cassandra.thrift $ cd gen-go/cassandra/ $ make 8g -o _go_.8 ttypes.go Cassandra.go Cassandra.go:89: syntax error: unexpected range, expecting ) Cassandra.go:99: syntax error: unexpected name, expecting ) Cassandra.go:109: syntax error: unexpected name, expecting ) Cassandra.go:121: syntax error: unexpected name, expecting ) ...
とここでコンパイルエラー。ソースを見てみたら、どうやら変数名に予約語のrangeが使用されてるせいでコンパイルエラーが起きている様子。ということでcassandra.thriftの定義を少々いじる。
$ diff cassandra.thrift cassandra.thrift.org 421c421 < 3:required KeyRange key_range, --- > 3:required KeyRange range,
そこから改めてコード生成してコンパイルしたら上手くいった。
$ thrift --gen go ~/lib/cassandra/interface/cassandra.thrift $ cd gen-go/cassandra/ $ make 8g -o _go_.8 ttypes.go Cassandra.go rm -f _obj/thriftlib/cassandra.a gopack grc _obj/thriftlib/cassandra.a _go_.8 cp _obj/thriftlib/cassandra.a "/home/masato/lib/google-go/pkg/linux_386/thriftlib/cassandra.a" $(続く)
0 件のコメント:
コメントを投稿