Golang與Python的親密接觸

會(huì)玩Go!會(huì)玩Python!嘭!Go-Python!

—— PPAP大叔

Golang是靜態(tài)語言,性能很好,當(dāng)它不那么靈活,不好在運(yùn)行時(shí)動(dòng)態(tài)運(yùn)行代碼。Python是動(dòng)態(tài)語言,非常靈活,但是性能很差。古人云:“魚和熊掌不能兼得”。但是如今有了Go-Python,魚和熊掌也可以兼得。

首先安裝go-python

go get github.com/sbinet/go-python

我們使用下面的代碼啟動(dòng)Python命令行解釋器 go run test.go

代碼很簡(jiǎn)單,先初始化,然后將命令行參數(shù)傳遞進(jìn)Py_Main函數(shù)就可以進(jìn)入Python命令行解釋器,就像直接敲python命令一樣

如果我們執(zhí)行 go run main.go --version就可以查看Python版本信息

接下來我們使用golang打印一下Python環(huán)境的sys.path變量

首先調(diào)用PyImport_ImportModule導(dǎo)入sys包,然后取出path對(duì)象,再獲取path的長度,使用循環(huán)挨個(gè)取出列表中的字符串,打印出來

我們看到默認(rèn)sys.path里面沒有包含當(dāng)前目錄,這意味著不能直接在當(dāng)前目錄導(dǎo)入模塊。

接下來我們?cè)趕ys.path里面加入當(dāng)前目錄

我們?cè)趕ys.path列表的頭部插入了空串,表示將當(dāng)前目錄加入sys.path,于是當(dāng)前目錄成為優(yōu)先查找路徑。

有了上面的代碼,我們可以試一試調(diào)用自定義python模塊了,先寫一個(gè)斐波那契級(jí)數(shù)

這是一個(gè)遞歸版本的實(shí)現(xiàn),n的大小不能超過最大棧深,好,下面使用go調(diào)用它

因?yàn)楫?dāng)前目錄已經(jīng)插入sys.path,我們可以直接使用PyImport_ImportModule導(dǎo)入fib模塊,然后獲取fib函數(shù)對(duì)象,注意函數(shù)也是一個(gè)PyObject對(duì)象。將整數(shù)10傳遞進(jìn)fib函數(shù),得到結(jié)果打印出來。

接下來我們嘗試在自定義模塊里使用requests訪問一下百度首頁,如果能使用第三方Python模塊,那么go-python也就比較Ok了。

touchBaidu返回的是一個(gè)requests.Response對(duì)象,該對(duì)象里的屬性status_code表示返回狀態(tài)碼,content屬性表示返回內(nèi)容。

何時(shí)使用go-python

你需要一個(gè)功能,沒有開源的go實(shí)現(xiàn),但是python有,并且性能不是很重要

你需要一個(gè)腳本語言嵌入到go中,讓go代碼獲得動(dòng)態(tài)能力

你想使用Cython干一些hack的事但是又不想擼C語言

go-python有什么缺點(diǎn)

python虛擬機(jī)是全局的,意味著線程不安全,在必要的地方要使用GIL保護(hù)

python會(huì)拖慢golang的性能,在性能重要的場(chǎng)合謹(jǐn)慎使用

閱讀相關(guān)文章,關(guān)注微信公眾號(hào)/知乎專欄/頭條號(hào)【碼洞】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 模塊和包 一 模塊 1 什么是模塊? 常見的場(chǎng)景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文件名就是...
    go以恒閱讀 2,344評(píng)論 0 4
  • Golang具有一套可以構(gòu)建和處理go源代碼的程序,作為命令行工具,這些程序也并非直接運(yùn)行,而是由go程序調(diào)用。運(yùn)...
    云時(shí)代的運(yùn)維開發(fā)閱讀 3,524評(píng)論 0 0
  • 那年,喜歡小動(dòng)物的小女兒一直想要一只可愛的小烏龜!帶她去公園玩的時(shí)候,爸爸就給她買了兩只龜龜,兩只它們好做伴,不孤...
    如此美好的一天jiayou閱讀 1,355評(píng)論 23 50
  • 一些人溫暖如春的時(shí)候,可能想不到另一群人還在瑟瑟發(fā)抖。最近,幾個(gè)省份禁止燒散煤動(dòng)了真格,但“煤改氣”卻沒有及時(shí)跟上...
    羅掌柜real閱讀 260評(píng)論 0 1
  • 文|007同學(xué) 有人說,人與人之間的感情,就像蓋房子,需要一磚一瓦累積,一點(diǎn)一滴呵護(hù)。 深以為然。 再好的關(guān)系,也...
    007同學(xué)閱讀 505評(píng)論 1 8

友情鏈接更多精彩內(nèi)容