python调用go语言的代码

最近在学习上述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

python调用go语言的代码_第1张图片

 
1.2编写go代码

一个简单的加法函数go代码实现,

pycallgo.go

package main

import "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 cdll

if __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的可以没有问题,是他的 你的需要研究其他类型

不同语言中类型事项的研究

你可能感兴趣的:(python个人使用代码,python实战代码集合,golang语言实战代码,golang,开发语言,后端)