...

Python通过C动态链接库调用Go语言函数

Python中自带的ctypes可以加载C标准动态链接库并调用其中方法,Golang则也可以按C标准类型编写并对外暴露函数,这样Python就可以调用由Go语言编写的函数进行操作。例如。

  1. 创建go项目
mkdir go-calc
cd go-calc
go mod init calc
echo "package main" > "main.go"
  1. 编写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 函数名进行导出,外部才能调用,函数名无需首字母大写

  1. 编译成C动态链接库
    在项目根目录下运行
go build -buildmode=c-shared -o calc.so
  1. 使用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,并发送原文链接。

posted @   韩志超  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-09-16 Linux基础命令必知必会
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题