python調(diào)用golang中函數(shù)方法
一、原因說明:由于simhash方法有多種實現(xiàn)方式,現(xiàn)python中simhash方法與golang中的不一樣,需要兩者代碼生成結(jié)果保持一致,故采用python中的代碼調(diào)用golang編譯的so文件來實現(xiàn)。
環(huán)境配置:①Windows10系統(tǒng)要有gcc環(huán)境,否則go build編譯so文件不會成功。,可以下載mingw-w64進行配置,下載地址:mingw-w64
Windows10系統(tǒng)環(huán)境%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調(diào)用golang代碼
方式二:go代碼中引用開源庫代碼(例如 import "github.com/xxx"),可參考該鏈接:go編譯so庫讓python引用,編譯后沒有.h文件的問題
三、重點說明
重點說明一下方式二,go代碼中涉及第三方依賴包引用,需要對調(diào)用的函數(shù)加上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的函數(shù)映射到python的函數(shù)調(diào)用。沒有export,編譯不能生成.h文件,python也就無法調(diào)用該函數(shù)
編譯命令參考如下:
go build -buildmode=c-shared -o simhash.so simhash.go
編譯成功后的列表如下圖,會出現(xiàn)一個so文件和一個h頭文件。(注意:只有一個so文件是編譯失敗,不會有提示信息,需要重新檢查代碼)
四、Python調(diào)用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調(diào)用golang中函數(shù)方法的詳細內(nèi)容,更多關于python調(diào)用golang函數(shù)的資料請關注腳本之家其它相關文章!
相關文章
Python開源自動化工具Playwright安裝及介紹使用
playwright-python是一個強大的Python庫,僅用一個API即可自動執(zhí)行Chromium、Firefox、WebKit等主流瀏覽器自動化操作,本文就詳細的介紹一下如何使用,感興趣的可以了解一下2021-12-12python中l(wèi)ist.sort()方法的具體使用
本文詳細介紹了Python中l(wèi)ist的sort方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-01-01python 實現(xiàn)檢驗33品種數(shù)據(jù)是否是正態(tài)分布
今天小編就為大家分享一篇python 實現(xiàn)檢驗33品種數(shù)據(jù)是否是正態(tài)分布,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python Shiny庫創(chuàng)建交互式Web應用及高級功能案例
Shiny是一個基于Python的交互式Web應用框架,專注于簡化Web應用的開發(fā)流程,本文將深入探討Shiny庫的基本用法、高級功能以及實際應用案例,以幫助開發(fā)者充分發(fā)揮Shiny在Web應用開發(fā)中的優(yōu)勢2023-12-12使用Python PIL庫讀取文件批量處理圖片大小實現(xiàn)
這篇文章主要為大家介紹了使用Python PIL庫讀取文件批量處理圖片大小實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07Python實現(xiàn)Mysql全量數(shù)據(jù)同步的腳本分享
這篇文章主要為大家詳細介紹了基于Python如何實現(xiàn)Mysql全量數(shù)據(jù)同步的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06Python 實現(xiàn)數(shù)據(jù)庫(SQL)更新腳本的生成方法
當我們需要準備更新腳本的使用,不小心會忘記改動了哪里,所以小編試著用Python來實現(xiàn)自動的生成更新腳本,具體操作方法,大家參考下本文吧2017-07-07