CGO
CGOはGo言語からC言語のコードを呼び出すための仕組み
基本使わない方が良い
基本的な仕組み
CGOを使うには、Goファイル内で コメント形式でCのコードを書き、Cのコードを実行するためのimportを追加する
このimportがあると、CGOが有効化される
code:go
package main
/*
#include <stdio.h>
#include <stdlib.h>
void hello() {
printf("Hello from C!\n");
}
*/
import "C"
func main() {
C.hello()
}
CGOを使うデメリットcgoを使うと、Goが持つメリットを殺してしまうことにつながるため、利用はおすすめしない
ビルドが遅くなる
GoとCのコードをそれぞれコンパイルする必要生まれる
クロスコンパイラに難あり
Goがサポートするアーキテクチャ(linux、windowsなど)にCが対応していない場合は制限がかかる
成果物が単一バイナリでなくなる
GoとCのバイナリが生まれるため二重管理がうまれる
デバッグが難しい
Cのコードでクラッシュした場合、Go側でデバッグできない
パフォーマンス測定が難しい
Cコード側のメモリなどのパフォーマンスがGoのコード側からは観測できない
参考資料
Cgo is not Go.
どうしてもcgoから逃げられなくなったあなたに知ってほしいcgoの使い方入門