成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Golang如何調(diào)用Python代碼詳解

Golang如何調(diào)用Python代碼詳解

熱門(mén)標(biāo)簽:高德地圖標(biāo)注口訣 中國(guó)地圖標(biāo)注省會(huì)高清 西部云谷一期地圖標(biāo)注 南通如皋申請(qǐng)開(kāi)通400電話 學(xué)海導(dǎo)航地圖標(biāo)注 浙江高速公路地圖標(biāo)注 地圖標(biāo)注的汽車(chē)標(biāo) 江西轉(zhuǎn)化率高的羿智云外呼系統(tǒng) 廣州呼叫中心外呼系統(tǒng)

前言

Python是時(shí)髦的機(jī)器學(xué)習(xí)御用開(kāi)發(fā)語(yǔ)言,Golang是大紅大紫的新時(shí)代后端開(kāi)發(fā)語(yǔ)言。Python很適合讓搞算法的寫(xiě)寫(xiě)模型,而Golang很適合提供API服務(wù),兩位同志都紅的發(fā)紫,這里就介紹一下正確攪基的辦法。

go 中的 cgo 模塊可以讓 go 無(wú)縫調(diào)用 c 或者 c++ 的代碼,而 python 本身就是個(gè) c 庫(kù),自然也可以由 cgo 直接調(diào)用,前提是指定正確的編譯條件,如 Python.h 頭文件(),以及要鏈接的庫(kù)文件。本文以 Ubuntu 18.04 作為開(kāi)發(fā)和運(yùn)行平臺(tái)進(jìn)行演示。

其實(shí)在使用 cgo 之前,筆者也考慮過(guò)使用 grpc 的方式。比如可以將需要調(diào)用的 python 代碼包裝成一個(gè) grpc server 端,然后再使用 go 編寫(xiě)對(duì)應(yīng)的 client 端,這樣考慮的前提是,go 調(diào)用 python 代碼本來(lái)就是解一時(shí)之困,而且引入語(yǔ)言互操作后,對(duì)于項(xiàng)目維護(hù)和開(kāi)發(fā)成本控制都有不小的影響,如果直接使用 grpc 生成編程語(yǔ)言無(wú)感知的協(xié)議文件,將來(lái)無(wú)論是重構(gòu)或使用其他語(yǔ)言替換 python 代碼,都是更加方便,也是更加解耦的。所以 grpc 也是一種比較好的選擇。至于通信延遲,老實(shí)說(shuō)既然已經(jīng)設(shè)計(jì)語(yǔ)言互操作,本機(jī)中不到毫秒級(jí)的損失其實(shí)也是可以接受的。

接下來(lái)進(jìn)入正題。

Golang調(diào)用Python代碼

1. 針對(duì) python 版本安裝 python-dev

sudo apt install python3.6-dev

系統(tǒng)未默認(rèn)安裝 python3.x 的開(kāi)發(fā)環(huán)境,所以假如要通過(guò) cgo 調(diào)用 python,需要安裝對(duì)應(yīng)版本的開(kāi)發(fā)包。

2. 指定對(duì)應(yīng)的cgo CFLAGS 和 LDFLAGS 選項(xiàng)

對(duì)于未由 c 包裝的 python 代碼,python-dev 包中內(nèi)置了 python-config 工具用于查看編譯選項(xiàng)。

python3.6-config --cflags

python3.6-config --ldflags

以下是對(duì)應(yīng)的輸出

-I/usr/include/python3.6m -I/usr/include/python3.6m  -Wno-unused-result -Wsign-compare -g -fdebug-prefix-map=/build/python3.6-MtRqCA/python3.6-3.6.6=. -specs=/usr/share/dpkg/no-pie-compile.specs -fstack-protector -Wformat -Werror=format-security  -DNDEBUG -g -fwrapv -O3 -Wall

-L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu -L/usr/lib -lpython3.6m -lpthread -ldl  -lutil -lm  -xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions

低版本的 python 也可以在安裝開(kāi)發(fā)包后,使用對(duì)應(yīng)的 python-config 命令打印依賴(lài)配置。由于 cgo 默認(rèn)使用的編譯器不是 gcc ,所以輸出中的部分選項(xiàng)并不受支持,所以最后 cgo 代碼的配置為

//#cgo CFLAGS : -I./ -I/usr/include/python3.6m
//#cgo LDFLAGS: -L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu -L/usr/lib -lpython3.6m -lpthread -ldl  -lutil -lm
//#include "Python.h"
import "C"

3. 部分示例代碼

3.0 映射 PyObject

type PyObject struct {
 ptr *C.PyObject
}

func togo(obj *C.PyObject) *PyObject {
 if obj == nil {
  return nil
 }
 return PyObject{ptr: obj}
}

func topy(self *PyObject) *C.PyObject {
 if self == nil {
  return nil
 }
 return self.ptr
}

3.1 python 環(huán)境的啟動(dòng)與終結(jié)

func Initialize() error {
 if C.Py_IsInitialized() == 0 {
  C.Py_Initialize()
 }
 if C.Py_IsInitialized() == 0 {
  return fmt.Errorf("python: could not initialize the python interpreter")
 }

 if C.PyEval_ThreadsInitialized() == 0 {
  C.PyEval_InitThreads()
 }
 if C.PyEval_ThreadsInitialized() == 0 {
  return fmt.Errorf("python: could not initialize the GIL")
 }

 return nil
}

func Finalize() error {
 C.Py_Finalize()
 return nil
}

3.2 包路徑與模塊導(dǎo)入

func InsertExtraPackageModule(dir string) *PyObject {
 sysModule := ImportModule("sys")
 path := sysModule.GetAttrString("path")

 cstr := C.CString(dir)
 defer C.free(unsafe.Pointer(cstr))
 C.PyList_Insert(topy(path), C.Py_ssize_t(0), topy(togo(C.PyBytes_FromString(cstr))))

 return ImportModule(dir)
}

func ImportModule(name string) *PyObject {
 c_name := C.CString(name)
 defer C.free(unsafe.Pointer(c_name))
 return togo(C.PyImport_ImportModule(c_name))
}

func (self *PyObject) GetAttrString(attr_name string) *PyObject {
 c_attr_name := C.CString(attr_name)
 defer C.free(unsafe.Pointer(c_attr_name))
 return togo(C.PyObject_GetAttrString(self.ptr, c_attr_name))
}

3.3 數(shù)據(jù)類(lèi)型轉(zhuǎn)換

func PyStringFromGoString(v string) *PyObject {
 cstr := C.CString(v)
 defer C.free(unsafe.Pointer(cstr))
 return togo(C.PyBytes_FromString(cstr))
}

func PyStringAsGoString(self *PyObject) string {
 c_str := C.PyBytes_AsString(self.ptr)
 return C.GoString(c_str)
}

...

可以看到形似 C.Py* 的方法都是由 cgo 模塊編譯調(diào)用的,這些方法也是 python 暴露的C-API ,而這里的示例就到此為止,其他諸如調(diào)用 python 模塊方法的功能文檔里也描述得十分詳細(xì),盡管實(shí)施起來(lái)仍然有些麻煩。

但是請(qǐng)注意 C-API 的 2.x 與 3.x 版本仍有不同,比如 2.x 版本中的字符串操作類(lèi)型 PyString_* 在 3.x 中便被重命名為 PyBytes_* 。

關(guān)注過(guò) go 與 python 互操作功能的同學(xué)應(yīng)該注意到上述的示例代碼部分來(lái)自 go-python 這個(gè)開(kāi)源項(xiàng)目,有興趣的同學(xué)也可以關(guān)注一下。 這個(gè)項(xiàng)目基于 python2.7 ,其中暴露的 api 諸如字符串轉(zhuǎn)換也是基于 python2.x 版本,所以針對(duì)于更流行的 python3.x 項(xiàng)目,大家就需要自己按照上文方法做一些修改了。

實(shí)際工作中,語(yǔ)言的互操作場(chǎng)景確實(shí)很讓人感覺(jué)頭疼,而 cgo 的文檔資料其實(shí)并不多,所以希望本文能給大家?guī)?lái)一些幫助。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)
  • python和js交互調(diào)用的方法
  • 通過(guò)實(shí)例解析Python調(diào)用json模塊
  • Python如何調(diào)用JS文件中的函數(shù)
  • json跨域調(diào)用python的方法詳解
  • Nodejs中調(diào)用系統(tǒng)命令、Shell腳本和Python腳本的方法和實(shí)例
  • python調(diào)用攝像頭的示例代碼
  • 使用C++調(diào)用Python代碼的方法詳解
  • 詳解C++調(diào)用Python腳本中的函數(shù)的實(shí)例代碼
  • Python調(diào)用JavaScript代碼的方法

標(biāo)簽:吐魯番 常州 保定 許昌 東營(yíng) 德宏 貴州 曲靖

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang如何調(diào)用Python代碼詳解》,本文關(guān)鍵詞  Golang,如何,調(diào)用,Python,代碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang如何調(diào)用Python代碼詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Golang如何調(diào)用Python代碼詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品嫩草69影院| 96视频在线观看欧美| 欧美伊久线香蕉线新在线| 被黑人猛躁10次高潮视频| 国产欧美日韩精品a在线观看| 亚洲日本精品一区| 在线播放欧美女士性生活| 疯狂做受xxxⅹ高潮视频免费| 欧美午夜片在线免费观看| 国产a∨精品一区二区三区仙踪林| 国产1区2区3区中文字幕| 午夜精品一区二区三区免费视频| 一区二区三区四区视频精品免费| 中文字幕在线免费视频| 欧美色道久久88综合亚洲精品| 一区二区黄色片| 岛国毛片在线观看| 国产蜜臀一区二区打屁股调教| 老司机深夜福利在线观看| 中文字幕一区二区三区四区欧美| 战狼4完整免费观看在线播放版| 一区二区三区精品国产| 日本一区二区三区电影免费观看| 四虎影院一区二区三区| 人妻丰满熟妇av无码区app| 日本少妇一区二区| 五月天婷婷社区| 日韩av在线电影网| 私人玩物在线观看| 午夜国产视频| 4444在线观看| 欧美一级在线亚洲天堂| 亚洲qvod图片区电影| 成人小视频在线播放| 国内露脸中年夫妇交换精品| 日本福利小视频| 97se亚洲国产一区二区三区| 欧美中文一区二区三区| 国内久久精品| av资源新版天堂在线| 女同视频在线观看| 日韩视频免费观看高清完整版在线观看| 欧美性猛交ⅹxxx乱大交免费| 日本电影一区二区在线观看| 高清电影在线观看免费| 日韩av综合在线观看| 午夜精品福利电影| 中文字幕一区视频| 在线观看你懂的网站| 久久99精品一区二区三区| 国产一区二中文字幕在线看| h片视频在线观看| 欧美午夜久久久| 精品小视频在线| 黄色一区二区三区| 碰碰在线视频| 久久久久久久久国产精品| 久久精品国亚洲| 色综合欧美在线视频区| 丁香视频五月| 人交獸av完整版在线观看| 午夜日韩在线| 亚洲三级电影| 91手机在线播放| 天堂中文字幕在线| 欧美在线观看日本一区| 8x8x华人在线| 国产精品免费一区二区三区在线观看| 免费在线视频一区二区| 日韩免费特黄一二三区| h网站在线免费观看| aa成人免费视频| 国产毛片av在线| 国产一区亚洲二区| www.一区| 久久夜色精品国产噜噜亚洲av| 亚洲最大中文字幕| 九九视频精品全部免费播放| 久久久久久久久久影视| 高清av中文在线字幕观看1| 久久99精品久久久久久青青91| 青草国产精品久久久久久| 一区二区亚洲精品| 91精品综合| 一级黄色片在线播放| 综合亚洲视频| 电影中文字幕一区二区| 黄色片在线免费观看| 精品久久久久久久久久ntr影视| 亚洲福利av在线| 中文字幕一区二区三区四区不卡| 亚洲sss视频在线视频| 亚洲毛片在线观看| 国产成人永久免费视频| 亚洲一区中文在线| 日韩欧美一区二区三区久久婷婷| 日本资源在线| 欧美另类视频在线观看| 丰满岳妇乱一区二区三区| 菠萝蜜视频在线观看www入口| 在线h片观看| 国产毛片视频| 波多野结衣一二三区| 免费在线成人激情电影| 午夜精品一区二区三区在线| 成人免费毛片播放| 欧美jizz| 国产亚洲欧美一区| 992tv人人草| 国产福利短视频| 免费观看久久久4p| 欧美日韩天堂| 午夜伦伦电影理论片费看| 91九色精品视频| 国产一级二级三级在线观看| 亚洲欧洲激情在线| 蜜桃视频在线观看免费视频| 综合久久久久久| 亚洲第一视频| 国产99久久久国产精品| 四虎影视免费看电影| 久久免费看少妇高潮v片特黄| 国产手机视频一区二区| 99精品国产高清一区二区麻豆| 欧美在线制服丝袜| 一区二区三区在线观看欧美| gogo高清在线播放免费| 免费xxxx性欧美18vr| 日韩有码片在线观看| 国产精品成人无码专区| 亚洲色图综合| 国产二区精品| 午夜国产一区| 国产精品视频久久久久| 精品视频一区二区在线观看| 男女小视频在线观看| 亚洲精品中字| 亚洲少妇久久久| 国产偷国产偷亚洲清高网站| 宅男网站在线免费观看| 在线观看黄网| 日本动漫理论片在线观看网站| 欧美性大战久久| 久久激情视频久久| 在线碰免费视频在线观看| 成年人免费av| 亚洲av午夜精品一区二区三区| 中文国语毛片高清视频| 欧美插天视频在线播放| 日韩电影网址| 亚洲精选视频免费看| 国产成人在线视频免费观看| 成人一区二区三区仙踪林| 欧美jizz19性欧美| 一级一级黄色片| 亚洲在线一区二区三区| 国产日产精品久久久久久婷婷| 日韩精品视频一区二区在线观看| 在线综合视频播放| 日韩电影在线免费| 国产免费一区二区三区在线能观看| 影音先锋日韩资源| 五月天电影免费在线观看一区| 久久aⅴ国产紧身牛仔裤| 黑丝一区二区| 亚洲综合激情另类专区老铁性| 色综合久久99| 一本一本久久| 99久久精品一区| 最新天堂中文在线| 国产精品资源在线| 四虎国产精品免费久久| 午夜国产福利在线观看| 欧美一级淫片免费视频魅影视频| 亚洲精品国产精品乱码视色| 精品欧美一区二区久久久久| 水蜜桃av无码| 国产视频一区二区三区四区五区| 91国产丝袜在线播放| 久久综合桃花网| 九九热视频这里只有精品| 国产精品三级视频| 国产精品白丝在线| 97精品高清一区二区三区| 国产又爽又黄无码无遮挡在线观看| 丁香五精品蜜臀久久久久99网站| 国产精品18久久久久网站| 亚洲欧洲另类国产综合| 欧美中文字幕一区二区三区| 亚洲综合视频在线播放| 涩爱av在线播放一区二区| 高清国产一区二区三区四区五区| 毛片在线免费播放| 国产精品最新在线观看| 国产精品一区不卡| 成人免费一区二区三区| 欧美日韩精品系列| 国产喷水在线观看| 好吊色一区二区三区| 变态另类ts人妖一区二区| 中文字幕人妻一区二区三区| 丰满熟妇人妻中文字幕| 久久久国产精品一区| 欧美色视频日本版| 杨钰莹一级淫片aaaaaa播放| 亚洲一区欧美激情| 99re这里只有精品在线| 丰满少妇久久久| 99久久精品国产亚洲| 无套白嫩进入乌克兰美女| 免费污视频在线一区| 视频区小说区图片区| 久久高清无码视频| 97人妻精品一区二区三区视频| 日韩在线激情| 台湾佬美性中文| www在线播放| 国产真实久久| 精品深夜福利视频| 91视频在线网站| 在线日韩欧美| 久久青青草原一区二区| 中文字幕少妇一区二区三区| 红桃av在线播放| 少妇极品熟妇人妻无码| 色乱码一区二区三在线看| www.天堂在线观看| 新久草在线视频| 久久久亚洲精品石原莉奈| 国产女主播福利| 免费黄色网址在线观看| 日韩精品一区二区三区免费视频| 久久久久久999| 日韩av一二三四区| 欧美一级精品片在线看| 日本国产在线| 欧美精品一区二区三区久久久| 无码人妻一区二区三区在线视频| 成人国产精品免费视频| 超碰在线caoporn| 踪合国产第二页| 亚洲精品一区二区18漫画| 不卡在线视频中文字幕| 欧美国产高跟鞋裸体秀xxxhd| 69视频在线免费观看| 精品日产免费二区日产免费二区| 天天操 夜夜操| 久久久久久久久久久97| 精品日韩在线观看| 黄网页在线观看| 精品欧美日韩一区二区| 欧美午夜性色大片在线观看| 久久综合亚洲色hezyo国产| 精品一区2区三区| 在线免费国产视频| 亚洲五月婷婷| 真人抽搐一进一出视频| 国产精品一区三区在线观看| 亚洲精品国产suv| 亚洲人成电影网站色mp4| 毛片在线看片| 亚洲精品美女久久久| 国产18精品乱码免费看| 天天躁日日躁aaaa视频| 奇米一区二区三区| 欧美色资源站| 免费av网站观看| 久久久久久久久一区| 57pao国产成永久免费视频| 精品肉辣文txt下载| 亚洲欧洲日本精品| 国产高清视频免费| 欧美精品亚洲精品| 9i看片成人免费高清| 中文字幕亚洲综合久久筱田步美| 婷婷免费在线视频| 99久久精品国产一区色| 国产免费亚洲高清| 久久精品国产99久久| 在线观看免费国产小视频| 羞羞电影在线观看www| 91亚洲一区二区| 天天爽夜夜爽视频| 亚洲mv大片欧洲mv大片| 美日韩丰满少妇在线观看| 国产一区二区三区高清在线观看| 99re亚洲国产精品| 久久国产婷婷国产香蕉| 国产露脸无套对白在线播放| 91成人看片片| 国产精品精品国产色婷婷| 成人久久18免费网站漫画| 欧美性猛交xxxx免费看漫画| 久久国产午夜精品理论片最新版本| 国产成人无码一区二区在线播放| 中文字幕日韩在线播放| av毛片在线免费观看| 亚洲无人区码一码二码三码| 久久天天躁夜夜躁狠狠躁2022| 91久久国产综合久久91猫猫| 成人在线免费公开观看视频| 日韩激情啪啪| 奇米影视888狠狠狠777不卡| 久久手机视频| 精品国产精品久久一区免费式| 少妇精品视频在线观看| 国产精品免费一区二区三区四区| 中文字幕亚洲乱码熟女1区2区| 性疯狂做受xxxx高清视频| gogo人体高清视频| 久久bbxx| 美女被黑人40厘米进入| 亚洲av无一区二区三区久久| 原纱央莉成人av片| 久久久国产精品不卡| 亚洲午夜黄色| 在线观看日本www| 国产在线高清| 国产亚洲综合色| 亚洲免费在线视频观看| 美女又爽又黄视频毛茸茸| jizzjizzjizz亚洲| 亚洲va欧美va| 91精品观看| 久久久亚洲天堂| 国产 日韩 欧美| 久久这里只有精品9| 97人妻精品一区二区三区动漫|