python调用golang中函数方法
一、原因说明:由于simhash方法有多种实现方式,现python中simhash方法与golang中的不一样,需要两者代码生成结果保持一致,故采用python中的代码调用golang编译的so文件来实现。
环境配置:①Windows10系统要有gcc环境,否则go build编译so文件不会成功。,可以下载mingw-w64进行配置,下载地址:mingw-w64
Windows10系统环境%PATH%配置增加以下路径:

如果是VSCode编译器,需要重启一下IDE,才能找到gcc命令:gcc --version

如果是VSCode编译器,需要重启一下IDE,才能找到gcc命令:gcc --version

即错误提示:"cc1.exe: sorry, unimplemented: 64-bit mode not compiled in"
把MinGW安装换成mingw-w64安装即可。
二、代码编写案例可参考以下两个:
方式一:go代码中未引用开源库代码,可参考该链接:python调用golang代码
方式二:go代码中引用开源库代码(例如 import "github.com/xxx"),可参考该链接:go编译so库让python引用,编译后没有.h文件的问题
三、重点说明
重点说明一下方式二,go代码中涉及第三方依赖包引用,需要对调用的函数加上export注释。如下所示:
//export SimhashText
func SimhashText(text *C.char) *C.char {
tempText := C.GoString(text)
sh := Simhash(NewWordFeatureSet([]byte(tempText)))
ret := strconv.FormatUint(sh, 10)
return C.CString(ret)
}如果提示报错(例如 C.GoStrings、C.Cstring()),可点击"regenerate cgo definitions" 生成C代码

注意:上面的"//export SimhashText" 不是注释,类似java中的注解,该声明会把go的函数映射到python的函数调用。没有export,编译不能生成.h文件,python也就无法调用该函数
编译命令参考如下:
go build -buildmode=c-shared -o simhash.so simhash.go
编译成功后的列表如下图,会出现一个so文件和一个h头文件。(注意:只有一个so文件是编译失败,不会有提示信息,需要重新检查代码)

四、Python调用so文件方式
将so文件与python代码放在同一目录下,示例代码如下:

import ctypes
text = "license that can be found in the LICENSE file."
simhashText = ctypes.cdll.LoadLibrary('./simhash.so').SimhashText
simhashText.argtypes = [ctypes.c_char_p]
simhashText.restype = ctypes.c_char_p
str1 = simhashText(text.encode("utf-8"))
print(str1)
# 5193707119813816010以上就是python调用golang中函数方法的详细内容,更多关于python调用golang函数的资料请关注脚本之家其它相关文章!
相关文章
Windows下将Python文件打包成.EXE可执行文件的方法
这篇文章主要介绍了Windows下将Python文件打包成.EXE可执行文件的方法,需要的朋友可以参考下2018-08-08
基于Python实现一个多分类的Logistic回归模型的代码示例
在机器学习中,Logistic回归是一种基本但非常有效的分类算法,它不仅可以用于二分类问题,还可以扩展应用于多分类问题,本文将详细介绍如何使用Python实现一个多分类的Logistic回归模型,并给出详细的代码示例,需要的朋友可以参考下2025-01-01
Python scikit-learn数据预处理常见方法和步骤
数据预处理是数据准备阶段的一个重要环节,主要目的是将原始数据转换成适合机器学习模型使用的格式,数据预处理可以显著提高机器学习模型的性能和准确度,本文给大家介绍了Python数据预处理常见方法和步骤,需要的朋友可以参考下2024-05-05
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
这篇文章主要介绍了python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-07-07


最新评论