1. Go 调用 C
C 代码写在 Go 代码注释里
go
package main
// int add(int a, int b) {
// return a + b;
// }
import "C"
import (
"fmt"
)
func main() {
fmt.Println(C.add(1, 2))
}
然后执行:
shell
go run main.go
C 和 Go 使用不同的文件
add.c
c
int add(int a, int b) {
return a + b;
}
main.go
go
package main
// #include "add.c"
import "C"
import (
"fmt"
)
func main() {
fmt.Println(C.add(1, 2))
}
然后执行:
shell
go run main.go
2. C 调用 Go
add.go
go
package main
import "C"
//export add
func add(a, b C.int) C.int {
return a + b
}
func main() {}
main.c
c
#include <stdio.h>
#include "add.h"
int main() {
printf("Hi from C\n");
printf("%d", add(1, 2));
return 0;
}
执行:
shell
go build -buildmode=c-archive -o add.a add.go
会生成 add.h 和 add.a 文件,然后执行:
shell
gcc add.a main.c -o main
注:通过
go help buildmode
可以查看更多帮助信息