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

Python調(diào)用golang代碼詳解

 更新時間:2024年02月11日 10:37:12   作者:hllyzms  
這篇文章主要給大家介紹了關(guān)于Python調(diào)用golang代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

有些時候因為效率問題部分代碼會 使用Python調(diào)用go的編譯生成動態(tài)鏈接庫

go 代碼示例

//add.go
package main

import "C"

//export Add
func Add(a, b int) int {
	return a + b
}

//export Addstr
func Addstr(a, b *C.char) *C.char {
	merge := C.GoString(a) + C.GoString(b)
	return C.CString(merge)
}

// go build -buildmode=c-shared -o add.so add.go
func main() {
}

注意 需要注意的是,這里的注釋//export Addstr //export Add 不能省略,因為在編譯成.so文件的時候,編譯器會尋找這個注釋。同時,為了能正常編譯,我們也必須導(dǎo)入C這個包。

## 特別注意 //和export 中間不能有空格

注意: 只有int可以不需要轉(zhuǎn)換,直接在go和C直接互相調(diào)用

對于不同的類型,需要使用cgo中定義的方法轉(zhuǎn)換,具體可以參考golang-cgo文檔。

比如string需要用C.char來傳遞,C.GoString(s)可以將C.char類型轉(zhuǎn)換為string,反之C.CString可以把string類型轉(zhuǎn)為 *C.char

Python是利用ctypes來跟so模塊進行交互,其中存在著一個代碼的翻譯過程,包括數(shù)據(jù)類型的翻譯,如果需要傳參獲取接收返回值,需要在golang中將參數(shù)按照下表對應(yīng),定義成C語言的數(shù)據(jù)類型。
python,ctypes , c 對應(yīng)類型參考 python 官方文檔:https://docs.python.org/3.5/library/ctypes.html

把代碼保存為fib.go,然后我們使用如下命令進行編譯:

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

這條命令指定了編譯模式為c-shared,編譯完成以后,當(dāng)前文件夾下面會生成一個add.so文件。這就是我們需要用 Python 載入的文件了。

注意: 不同平臺下編譯的add.so 不能通用,Windows下可以運行的so文件,linux下就不能運行,需要重新編譯linux的so文件

python 中調(diào)用go模塊’

# -*- coding:utf-8 -*-
# @Time    : 2020/9/29
# @Author  : hllyzms
import ctypes

lib = ctypes.cdll.LoadLibrary('./add.so')

result = lib.Add(2020, 1)
print(result)

add = lib.Addstr  #調(diào)用go模塊
# 顯式聲明參數(shù)和返回的期望類型
add.argtypes = [ctypes.c_char_p, ctypes.c_char_p]
add.restype = ctypes.c_char_p
str1 = add("abc".encode("utf-8"),'efg'.encode("utf-8"))
print(str1,type(str1))

結(jié)果:

2021
b'abcefg' <class 'bytes'>

注意 Addstr 傳入測參數(shù)要轉(zhuǎn)換成byte類型

go中的*C.char 對應(yīng) ctypes 中的c_char_p 對應(yīng)Python中的bytes object or None

Python與Go之間的參數(shù)傳遞, 處理非INT型時需要都轉(zhuǎn)為對應(yīng)的C類型

ctypes需要顯式地聲明DLL函數(shù)的參數(shù)和返回期望的數(shù)據(jù)類型

注意在Python3中字符串bytes和string的區(qū)別

Go模塊需要//export 聲明外部可調(diào)用

Go處理C的類型是需要顯式轉(zhuǎn)換

以上就是Python調(diào)用golang代碼詳解的詳細內(nèi)容,更多關(guān)于Python調(diào)用golang的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python多進程機制實例詳解

    Python多進程機制實例詳解

    這篇文章主要介紹了Python多進程機制,以實例形式詳細分析了Python多進程機制的原理與實現(xiàn)技巧,需要的朋友可以參考下
    2015-07-07
  • Python爬取梨視頻的示例

    Python爬取梨視頻的示例

    這篇文章主要介紹了Python爬取梨視頻的示例,幫助大家更好的利用python進行爬蟲的學(xué)習(xí)與使用,感興趣的朋友可以了解下
    2021-01-01
  • Gradio機器學(xué)習(xí)模型快速部署工具quickstart

    Gradio機器學(xué)習(xí)模型快速部署工具quickstart

    這篇文章主要為大家介紹了Gradio機器學(xué)習(xí)模型快速部署工具quickstart,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

    python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

    這篇文章主要為大家介紹了python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • pytorch visdom安裝開啟及使用方法

    pytorch visdom安裝開啟及使用方法

    這篇文章主要介紹了pytorch visdom安裝開啟及使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python爬蟲爬取杭州24時溫度并展示操作示例

    Python爬蟲爬取杭州24時溫度并展示操作示例

    這篇文章主要介紹了Python爬蟲爬取杭州24時溫度并展示操作,結(jié)合實例形式分析了Python爬蟲進行頁面爬取與數(shù)據(jù)分析、展示相關(guān)操作技巧,需要的朋友可以參考下
    2020-03-03
  • Opencv對象追蹤的示例代碼

    Opencv對象追蹤的示例代碼

    這篇文章主要介紹了Opencv對象追蹤的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 解析python中的jsonpath 提取器

    解析python中的jsonpath 提取器

    jsonPath 是一種信息抽取類庫,是從JSON文檔中抽取指定信息的工具,提供多種語言實現(xiàn)版本,包括:Javascript, Python, PHP 和 Java。本文給大家介紹python的jsonpath 提取器,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • 關(guān)于Django ForeignKey 反向查詢中filter和_set的效率對比詳解

    關(guān)于Django ForeignKey 反向查詢中filter和_set的效率對比詳解

    今天小編就為大家分享一篇關(guān)于Django ForeignKey 反向查詢中filter和_set的效率對比詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • PyQt5主窗口動態(tài)加載Widget實例代碼

    PyQt5主窗口動態(tài)加載Widget實例代碼

    這篇文章主要介紹了PyQt5主窗口動態(tài)加載Widget實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02

最新評論