#include <stdio.h> int myadd(int a, int b) { return a + b; } */ import "C" import "fmt" func main() { // C の関数を呼び出す c := C.myadd(1, 2) fmt.Printf("result value = %d, result type = %T", c, c) } - 使い方 1. Go側でCの関数を定義して呼び出す 2. Go側からCの定義済み関数を呼び出す 3. C側から定義済みGo関数を呼び出す
int myadd(int a, int b) { return a + b; } */ import "C" import "fmt" func main() { // C の関数を呼び出す c := C.myadd(1, 2) fmt.Printf("result value = %d, result type = %T", c, c) } 1. コメントアウトで C の関数を定義 1. Go側でCの関数を定義して呼び出す 2. 直後でcgo パッケージをimport 3. C.”関数名” として定義さ れた関数を呼び出す - 使い方 1. Go側でCの関数を定義して呼び出す 2. Go側からCの定義済み関数を呼び出す 3. C側から定義済みGo関数を呼び出す
Goコードのコンパイル 26 package main /* #include <stdio.h> int myadd(int a, int b) { return a + b; } */ import "C" import "fmt" func main() { // C の関数を呼び出す c := C.myadd(1, 2) fmt.Printf("[result] value = %d, type = %T", c, c) } go build -a \ # -a : 強制再ビルド -x \ # -x : 出力内容を全表示 main.go > output.txt 対象のソースコード (既出) ビルドコマンド 4. まとめる 5. リンク
Goコードのコンパイル 27 package main /* #include <stdio.h> int myadd(int a, int b) { return a + b; } */ import "C" import "fmt" func main() { // C の関数を呼び出す c := C.myadd(1, 2) fmt.Printf("[result] value = %d, type = %T", c, c) } go build -a \ # -a : 強制再ビルド -x \ # -x : 出力内容を全表示 main.go > output.txt 対象のソースコード (既出) ビルドコマンド 4. まとめる 5. リンク
(cgo) 2. Cコードのコンパイル 3. Goコードのコンパイル 28 go build -a \ # -a : 強制再ビルド -x \ # -x : 出力内容を全表示 main.go > output.txt ビルドコマンド package main /* #include <stdio.h> int myadd(int a, int b) { return a + b; } */ import "C" import "fmt" func main() { // C の関数を呼び出す c := C.myadd(1, 2) fmt.Printf("[result] value = %d, type = %T", c, c) } 対象のソースコード (既出)