CGO は、golang と C 言語が相互に呼び出すためのメカニズムを提供します。サードパーティのライブラリによっては C/C 実装しかできない場合もあり、純粋な golang を使用した実装は大規模なプロジェクトになる場合がありますが、このような場合には CGO が役立ちます。 (推奨学習: go)
CGO を介して golang で C インターフェイスを呼び出すことができます。C インターフェイスは C でパッケージ化し、呼び出し用に golang に提供できます。
呼び出される C コードは、ソース コード形式で直接提供することも、静的ライブラリまたは動的ライブラリとしてパッケージ化してコンパイル時にリンクすることもできます。コードの分離を容易にする静的ライブラリの使用が推奨されます。コンパイルされたバイナリには動的ライブラリの依存関係がなく、リリースに便利です。また、golang の理念にも沿っています。
CGO の使用方法に関する具体的なチュートリアルはこの記事では取り上げませんが、ここでは主に CGO を使用する際の落とし穴を避けるための詳細を紹介します。
パラメータの受け渡し
基本的な数値型
Golang の基本的な数値型メモリ モデルは C 言語と同じです。連続数バイト(1 / 2 / 4 / 8 バイト)。
したがって、数値型を渡すとき、golang の基本数値型を対応する CGO 型に直接変換してから、それを C 関数呼び出しに渡すことができ、その逆も可能です。
package main /* #include <stdint.h> static int32_t add(int32_t a, int32_t b) { return a + b; } */ import "C" import "fmt" func main() { var a, b int32 = 1, 2 var c int32 = int32(C.add(C.int32_t(a), C.int32_t(b))) fmt.Println(c) // 3 }
以上がGolang Cgoとはの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。