Golang Cgoとは

(*-*)浩
(*-*)浩オリジナル
2019-12-03 09:20:034334ブラウズ

Golang Cgoとは

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。