Python通过C动态链接库调用Go语言函数
Python中自带的ctypes可以加载C标准动态链接库并调用其中方法,Golang则也可以按C标准类型编写并对外暴露函数,这样Python就可以调用由Go语言编写的函数进行操作。例如。
- 创建go项目
mkdir go-calc
cd go-calc
go mod init calc
echo "package main" > "main.go"
- 编写go函数
main.go
package main
import "C"
//export add_int
func add_int(a, b C.int) C.int{
return a + b
}
//export add_float
func add_float(a, b C.float) C.float{
return a + b
}
//export add_str
func add_str(a,b * C.char) *C.char{
c := C.GoString(a) + C.GoString(b)
return C.CString(c)
}
func main(){
}
注意,每个函数上必须用
//export 函数名
进行导出,外部才能调用,函数名无需首字母大写
- 编译成C动态链接库
在项目根目录下运行
go build -buildmode=c-shared -o calc.so
- 使用Python调用Go函数
新建call_go.py
import ctypes
lib = ctypes.CDLL("./calc.so")
print(lib.add_int(3, 5))
lib.add_float.argtypes = [ctypes.c_float, ctypes.c_float]
lib.add_float.restype = ctypes.c_float
print(lib.add_float(3.5, 5.2))
lib.add_str.argtypes = [ctypes.c_char_p, ctypes.c_char_p]
lib.add_str.restype = ctypes.c_char_p
print(lib.add_str(b'Hello', b'World'))
运行后输出如下:
8
8.699999809265137
b'HelloWorld'
注:浮点数相加不准确是计算机计算一个常见问题
作者:韩志超
出处:https://www.cnblogs.com/superhin/p/18415865/python_call_go
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
如有问题,请微信联系 superz-han,并发送原文链接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-09-16 Linux基础命令必知必会