python调用golang中函数方法

 更新时间:2024年02月11日 10:45:12   作者:dkgee  
由于simhash方法有多种实现方式,现python中simhash方法与golang中的不一样,需要两者代码生成结果保持一致,故采用python中的代码调用golang编译的so文件来实现,需要的朋友可以参考下

一、原因说明:由于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函数的资料请关注脚本之家其它相关文章!

相关文章

  • Python开源自动化工具Playwright安装及介绍使用

    Python开源自动化工具Playwright安装及介绍使用

    playwright-python是一个强大的Python库,仅用一个API即可自动执行Chromium、Firefox、WebKit等主流浏览器自动化操作,本文就详细的介绍一下如何使用,感兴趣的可以了解一下
    2021-12-12
  • python中list.sort()方法的具体使用

    python中list.sort()方法的具体使用

    本文详细介绍了Python中list的sort方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • python 实现检验33品种数据是否是正态分布

    python 实现检验33品种数据是否是正态分布

    今天小编就为大家分享一篇python 实现检验33品种数据是否是正态分布,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python Shiny库创建交互式Web应用及高级功能案例

    Python Shiny库创建交互式Web应用及高级功能案例

    Shiny是一个基于Python的交互式Web应用框架,专注于简化Web应用的开发流程,本文将深入探讨Shiny库的基本用法、高级功能以及实际应用案例,以帮助开发者充分发挥Shiny在Web应用开发中的优势
    2023-12-12
  • 使用Python PIL库读取文件批量处理图片大小实现

    使用Python PIL库读取文件批量处理图片大小实现

    这篇文章主要为大家介绍了使用Python PIL库读取文件批量处理图片大小实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 浅谈matplotlib.pyplot与axes的关系

    浅谈matplotlib.pyplot与axes的关系

    这篇文章主要介绍了浅谈matplotlib.pyplot与axes的关系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Python进行数组的排序、倒序、截取方式

    Python进行数组的排序、倒序、截取方式

    这篇文章主要介绍了Python进行数组的排序、倒序、截取方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python实现Mysql全量数据同步的脚本分享

    Python实现Mysql全量数据同步的脚本分享

    这篇文章主要为大家详细介绍了基于Python如何实现Mysql全量数据同步的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-06-06
  • Python 实现数据库(SQL)更新脚本的生成方法

    Python 实现数据库(SQL)更新脚本的生成方法

    当我们需要准备更新脚本的使用,不小心会忘记改动了哪里,所以小编试着用Python来实现自动的生成更新脚本,具体操作方法,大家参考下本文吧
    2017-07-07
  • pandas读取csv文件提示不存在的解决方法及原因分析

    pandas读取csv文件提示不存在的解决方法及原因分析

    这篇文章主要介绍了pandas读取csv文件提示不存在的解决方法及原因分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论