网站广告投放价格表,合肥优秀网站建设,网站开发的研究现状,wordpress底部自豪采用一、原因说明#xff1a;由于simhash方法有多种实现方式#xff0c;现python中simhash方法与golang中的不一样#xff0c;需要两者代码生成结果保持一致#xff0c;故采用python中的代码调用golang编译的so文件来实现。
环境配置#xff1a;①Windows10系统要有gcc环境由于simhash方法有多种实现方式现python中simhash方法与golang中的不一样需要两者代码生成结果保持一致故采用python中的代码调用golang编译的so文件来实现。
环境配置①Windows10系统要有gcc环境否则go build编译so文件不会成功。可以下载mingw-w64进行配置下载地址mingw-w64
Windows10系统环境%PATH%配置增加以下路径 如果是VSCode编译器需要重启一下IDE才能找到gcc命令gcc --version 注意有的Windows10通过MinGW Installer安装的32位gcc版本编译会报错。如下 即错误提示cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
把MinGW安装换成mingw-w64安装即可。
推荐参考地址windows gcc 遇到的问题解决 二、代码编写案例可参考以下两个
方式一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 -buildmodec-shared -o simhash.so simhash.go
编译成功后的列表如下图会出现一个so文件和一个h头文件。注意只有一个so文件是编译失败不会有提示信息需要重新检查代码 四、Python调用so文件方式
将so文件与python代码放在同一目录下示例代码如下 import ctypestext 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