最近在学习上述Python,go语言,研究下互相调用的事项,在windows下使用
linux下:
gcc -o libpycall.so -shared -fPIC pycall.c
windows下:
gcc -o libpycall.dll -shared -fPIC pycall.c
但是实际的过程中编译成*.so文件在windows也能使用,下面的代码都是在windows下使用的可以运行成功 ;
一、pyton调用go语言的代码
准备工作:
1.1基础环境要求[解决go语言编译用gcc编译的事情,必须得有gcc编译器]
必须得有这个,同时把这个放在环境变量里面
具体参加:这里但是需要下载一个64位环境的
x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0.7z
https://ht666666.blog.csdn.net/article/details/124512392
1.2编写go代码
一个简单的加法函数go代码实现,
pycallgo.go
package mainimport "C"//export Add
func Add(a, b int) int {return a + b
}
func main() {}//编译命令
//go build -buildmode=c-shared -o libadd.so libadd.go
1.3编译go代码
//编译命令
//go build -buildmode=c-shared -o libadd.so libadd.go
新生成的文件
1.4把上述新生成的两个文件复制到python的目录下
[实质上,复制一个*.so文件即可,不用复制*.h文件]
1.5编写python调用代码
from ctypes import cdllif __name__ == '__main__':libadd=cdll.LoadLibrary("./libadd.so")result=libadd.Add(6,9)ret2=libadd.Add(10,19)print(result,ret2)
1.6显示效果
可以使用
Python与Go之间的参数传递, 处理非INT型时需要都转为对应的C类型
ctypes需要显式地声明DLL函数的参数和返回期望的数据类型
注意在Python3中字符串bytes和string的区别
Go模块需要//export 声明外部可调用
Go处理C的类型是需要显式转换
pyton调用go程序 类型是int的可以没有问题,是他的 你的需要研究其他类型
不同语言中类型事项的研究