欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python調(diào)用golang中函數(shù)方法

 更新時間:2024年02月11日 10:45:12   作者:dkgee  
由于simhash方法有多種實現(xiàn)方式,現(xiàn)python中simhash方法與golang中的不一樣,需要兩者代碼生成結(jié)果保持一致,故采用python中的代碼調(diào)用golang編譯的so文件來實現(xiàn),需要的朋友可以參考下

一、原因說明:由于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ù)的資料請關注腳本之家其它相關文章!

相關文章

最新評論