python常用的是开发内嵌的C模块,现在没有golang直接内嵌的方法,方式一般为通过C作为传输中介,一边开发python程序,一边开发golang模块,最终再将golang的模块嵌入的python的直接调用。
以下为一个例子,我们直接开始一个传递复杂参数数组的例子:
本例是计算数组中元素值的总和,如下
test.go (golang文件)
package main
import "C"
import "fmt"
import "unsafe"
//export addArr
func addArr(arr *C.float, size C.int) C.int {
arrList := (*[1<<5]C.float)(unsafe.Pointer(arr))[:size:size]
fmt.Println(arrList)
return 100
}
func main() {}
注意编译方式:
go build -x -v -ldflags "-s -w" -buildmode=c-shared -o test.so test.go
test.py(python文件)
#!/usr/bin/env python
import ctypes
addArr = ctypes.CDLL('./test.so').addArr
TenFloat = ctypes.c_float*10
addArr.argtypes = [ctypes.c_float*10]
addArr.restype = ctypes.c_int
res = addArr(TenFloat(156.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 8.1, 9.1, 10.3), 10)
print(res)
这里面test.go和test.py在同一个目录下,以引用成功。
以上示例,运行test.py即可打印出浮点型数组的元素总和。
备注:经验证,该示例与python的版本没有关系,2.7和3.5均可。