zvvq技术分享网

如何把 Golang 与 python 集成?

作者:zvvq博客网
导读如何将 golang 与 python 集成?安装 golang 和 python。配置 gopath 环境变量。安装 cgo golang 包。创建 golang 项目。为 python 组件编写 golang wrapper 函数。在 python 项目中创建模块。使用 cgo 构建

如何把 golang 与 python 集成?组装 golang 和 python。配备 gopath 环境变量。组装cgo golang 包。建立 golang 项目。为 python部件撰写 golang wrapper函数。在 python工程中建立模块。应用 cgo 搭建 golang 项目。在 golang 代码中启用 python函数。运作 golang 程序。 内容来自samhan666

内容来自samhan666

Golang 架构与 Python 集成

内容来自zvvq,别采集哟

有时,您可能需要在 Golang 应用程序中应用 Python 部件。本指南将向您展现如何把 Golang 与 Python 集成,并提供一个实战案例。

zvvq好,好zvvq

前提条件 内容来自samhan

组装 Golang 和 Python 配备 GOPATH 环境变量组装名叫 cgo 的 Golang 包步骤 本文来自zvvq

建立 Golang 项目1 本文来自zvvq

mkdirgolang-python-integration&&cdgolang-python-integration zvvq

撰写 Golang wrapper为 Python 部件创建一个 Golang wrapper函数。这将允许您在 Golang 代码中启用 Python 函数。 内容来自samhan

//mypython.go

内容来自zvvq

packagemain 本文来自zvvq

/

zvvq好,好zvvq

include 内容来自samhan

staticPyObjectcall_python_function(charfunc_name){

zvvq好,好zvvq

PyObjectpName,pModule,pDict,pFunc,pValue;

zvvq好,好zvvq

pName=PyUnicode_DecodeFSDefault(func_name); copyright zvvq

pModule=PyImport_Import(pName);

本文来自zvvq

pDict=PyModule_GetDict(pModule); 内容来自zvvq

pFunc=PyDict_GetItemString(pDict,"my_function"); 内容来自zvvq,别采集哟

pValue=PyObject_CallObject(pFunc,NULL);

copyright zvvq

returnpValue; 内容来自samhan

} copyright zvvq

/

copyright zvvq

import"C"

zvvq

import(

内容来自zvvq

"fmt"

内容来自samhan

"unsafe" 内容来自samhan666

) zvvq好,好zvvq

funcmain(){

内容来自zvvq

result:=C.call_python_function(C.CString("my_function"))

zvvq好,好zvvq

fmt.Println(C.GoString(result))

内容来自samhan666

} 内容来自samhan

撰写 Python 模块在 Python 工程中建立 my_function 模块。 本文来自zvvq

my_function.py

内容来自samhan

defmy_function(): zvvq

return"HellofromPython!"

zvvq

搭建 Golang 项目应用 cgo 搭建 Golang 项目。它将允许 Golang 程序启用 C 编码,后者又把启用 Python 编码。 zvvq

gobuild-buildmode=c-shared-omypython.somypython.go

copyright zvvq

启用 Python 函数在 Golang 代码中,您可以如今启用 Python 函数。 内容来自samhan666

packagemain

copyright zvvq

import( zvvq好,好zvvq

"fmt"

copyright zvvq

"log"

本文来自zvvq

"syscall" 内容来自zvvq

"unsafe" 内容来自zvvq

)

内容来自zvvq,别采集哟

funcmain(){ 内容来自samhan

//Loadthesharedlibrary.

zvvq好,好zvvq

lib,err:=syscall.LoadDLL("mypython.so") 内容来自samhan666

iferr!=nil{

内容来自samhan666

log.Fatal(err) zvvq.cn

}

本文来自zvvq

deferlib.Release() copyright zvvq

//Getthefunctionpointer.

本文来自zvvq

callPythonFunction,err:=lib.FindProc("call_python_function")

zvvq.cn

iferr!=nil{

zvvq.cn

log.Fatal(err) 内容来自zvvq,别采集哟

}

zvvq好,好zvvq

//Callthe Python function.

本文来自zvvq

result,_,err:=callPythonFunction.Call( zvvq

uintptr(unsafe.Pointer(syscall.StringBytePtr("my_function"))),

copyright zvvq

) 内容来自zvvq,别采集哟

iferr!=nil{

内容来自zvvq

log.Fatal(err)

内容来自zvvq,别采集哟

} zvvq好,好zvvq

//Printtheresult.

zvvq好,好zvvq

fmt.Println(syscall.UTF16ToString(([1<<30]uint16)(unsafe.Pointer(result))[:])) 本文来自zvvq

} copyright zvvq

运作

内容来自samhan666

运作 Golang 程序。 内容来自zvvq,别采集哟

gorunmain.go zvvq

导出

zvvq好,好zvvq

HellofromPython! zvvq.cn

您现在已成功将 Golang 与 Python 集成,并调用了 Python 函数。 zvvq

以上就是Golang架构如何跟Python集成?的详细内容,大量请关注其他类似文章!

内容来自samhan666