最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、原因說(shuō)明:由于simhash方法有多種實(shí)現(xiàn)方式,現(xiàn)python中simhash方法與golang中的不一樣,需要兩者代碼生成結(jié)果保持一致,故采用python中的代碼調(diào)用golang編譯的so文件來(lái)實(shí)現(xiàn)。

環(huán)境配置:①Windows10系統(tǒng)要有g(shù)cc環(huán)境,否則go build編譯so文件不會(huì)成功。,可以下載mingw-w64進(jìn)行配置,下載地址:mingw-w64

Windows10系統(tǒng)環(huán)境%PATH%配置增加以下路徑:

如果是VSCode編譯器,需要重啟一下IDE,才能找到gcc命令:gcc --version

如果是VSCode編譯器,需要重啟一下IDE,才能找到gcc命令:gcc --version

即錯(cuò)誤提示:"cc1.exe: sorry, unimplemented: 64-bit mode not compiled in"

把MinGW安裝換成mingw-w64安裝即可。

二、代碼編寫(xiě)案例可參考以下兩個(gè)

方式一:go代碼中未引用開(kāi)源庫(kù)代碼,可參考該鏈接:python調(diào)用golang代碼  

方式二:go代碼中引用開(kāi)源庫(kù)代碼(例如 import "github.com/xxx"),可參考該鏈接:go編譯so庫(kù)讓python引用,編譯后沒(méi)有.h文件的問(wèn)題

三、重點(diǎn)說(shuō)明

重點(diǎn)說(shuō)明一下方式二,go代碼中涉及第三方依賴(lài)包引用,需要對(duì)調(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)
}

如果提示報(bào)錯(cuò)(例如 C.GoStrings、C.Cstring()),可點(diǎn)擊"regenerate cgo definitions" 生成C代碼

注意:上面的"//export SimhashText" 不是注釋?zhuān)?lèi)似java中的注解,該聲明會(huì)把go的函數(shù)映射到python的函數(shù)調(diào)用。沒(méi)有export,編譯不能生成.h文件,python也就無(wú)法調(diào)用該函數(shù)

編譯命令參考如下:

go build -buildmode=c-shared -o simhash.so simhash.go

編譯成功后的列表如下圖,會(huì)出現(xiàn)一個(gè)so文件和一個(gè)h頭文件。(注意:只有一個(gè)so文件是編譯失敗,不會(huì)有提示信息,需要重新檢查代碼)

四、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ù)方法的詳細(xì)內(nèi)容,更多關(guān)于python調(diào)用golang函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

同仁县| 砀山县| 托克托县| 贵阳市| 广河县| 巩留县| 五河县| 孟津县| 永川市| 长丰县| 博爱县| 新化县| 会同县| 天气| 吉木萨尔县| 慈利县| 札达县| 视频| 乐都县| 长治市| 南召县| 荥经县| 绥德县| 玉溪市| 宁陵县| 满洲里市| 上蔡县| 北碚区| 江达县| 昆明市| 社旗县| 新源县| 宁武县| 城口县| 开远市| 都昌县| 汉源县| 六枝特区| 黄山市| 河南省| 眉山市|