どうしてもcgoから逃げられなくなったあなたに知ってほしいcgoの使い方入門
"Cgo is not Go"という格言があるように、C/C++の資源をGoから呼び出す行為というのは、シンプルなビルドや優れたパフォーマンスといったGoの良さを殺してしまうため基本的には避けるのが主流です。Goコンパイラ・ランタイム自身もバージョン1.4を最後にC言語への依存を撤廃しており、なるべくpure Goで実装しようという潮流は今後も変わることはないでしょう。 しかし、世の中から「C言語で作られたリソースをGoで作ったアプリケーション内で利用しなければいけない」という場面が完全になくなることはありません。筆者もそのような要件からどうしても逃げられなかった経験を持つ一人です。 繰り返しになりますが、cgoをあえて使うという選択肢は一般的なものではありません。それゆえに、"Hello, World!"程度の小規模な利用の仕方であればThe Go Blog等に情報がありますが、ある程度の規模のC/C++ライブラリをcgoを用いてGoのコードから呼び出せるようにするためのノウハウはウェブ上には現状皆無といって良いかと思います。 本セッションでは、「C言語は学生時代に少しだけ触ったことがある、C++は一切経験なし」というバックグラウンドから、C/C++製の静的ライブラリを組み込んでGoのプロダクトを作ることになったときの筆者の試行錯誤の体験をお話しようかと思います。