用golang开发python动态模块

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均可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值