亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

有些時(shí)候因?yàn)樾蕟栴}部分代碼會(huì) 使用Python調(diào)用go的編譯生成動(dòng)態(tài)鏈接庫(kù)

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 不能省略,因?yàn)樵诰幾g成.so文件的時(shí)候,編譯器會(huì)尋找這個(gè)注釋。同時(shí),為了能正常編譯,我們也必須導(dǎo)入C這個(gè)包。

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

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

對(duì)于不同的類型,需要使用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模塊進(jìn)行交互,其中存在著一個(gè)代碼的翻譯過程,包括數(shù)據(jù)類型的翻譯,如果需要傳參獲取接收返回值,需要在golang中將參數(shù)按照下表對(duì)應(yīng),定義成C語言的數(shù)據(jù)類型。
python,ctypes , c 對(duì)應(yīng)類型參考 python 官方文檔:https://docs.python.org/3.5/library/ctypes.html

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

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

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

注意: 不同平臺(tái)下編譯的add.so 不能通用,Windows下可以運(yùn)行的so文件,linux下就不能運(yùn)行,需要重新編譯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 傳入測(cè)參數(shù)要轉(zhuǎn)換成byte類型

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

Python與Go之間的參數(shù)傳遞, 處理非INT型時(shí)需要都轉(zhuǎn)為對(duì)應(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代碼詳解的詳細(xì)內(nèi)容,更多關(guān)于Python調(diào)用golang的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python多進(jìn)程機(jī)制實(shí)例詳解

    Python多進(jìn)程機(jī)制實(shí)例詳解

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

    Python爬取梨視頻的示例

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

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

    這篇文章主要為大家介紹了Gradio機(jī)器學(xué)習(xí)模型快速部署工具quickstart,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    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,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • pytorch visdom安裝開啟及使用方法

    pytorch visdom安裝開啟及使用方法

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

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

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

    Opencv對(duì)象追蹤的示例代碼

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

    解析python中的jsonpath 提取器

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

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

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

    PyQt5主窗口動(dòng)態(tài)加載Widget實(shí)例代碼

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

最新評(píng)論