python与go的对接

.so
.so

编译

用测试项目来记录解决过程

测试环境:windows64

源码目录结构:

---test
|___Add___add.go
|___main___main.go

给python调用需要在被调用的函数前加上

//export 函数名
import "C"

遇到的问题

进行的操作:

在test目录下直接go bulid,报错,提示必须要有 go 文件

go build -o main

 这个错误是因为在 32 位的 Windows 操作系统上使用了 64 位版本的 Go,或者是因为在 64 位的 Windows 操作系统上使用了不支持 64 位编译的 C 编译器。

于是修改环境变量

说明:

cgo

 2、python平台也是Windows,需要设置 GOARCH 为64位平台,对方才能调用

3、这个部分是报错的原因,要先重新下载 mingw32 ,之前下载的环境是32位系统,参考,再修改环境变量

原来的环境变量如下,用作备份

 

.so

可参考

打包

//export 函数名

在终端输入

 go build -buildmode=c-shared -o mylib.so ./main.go
mylib.so
./

如果是需要打包项目,需要进入项目目录下,执行

 go build -buildmode=c-shared -o mylib.so ./...

python调用

python调用的时候也遇到了一些问题

[]byte[]byte
string[]byte*char
*C.char

python 的处理如下

go需要调用C.GoString()将*C.char转为go中的string类型

最后补充一个表, python,ctypes , c 对应类型