Python通过C动态链接库调用Go语言函数

简介: Python通过C动态链接库调用Go语言函数

Python通过C动态链接库调用Go语言函数
合集 - Python跨语言调用(3)
1.
Python通过C动态链接库调用
C语言函数
09-15
2.
Python通过C动态链接库调用
Go语言函数
09-16
3.
Python通过C动态链接库调用
Rust语言函数
09-12
收起
Python中自带的ctypes可以加载C标准动态链接库并调用其中方法,Golang则也可以按C标准类型编写并对外暴露函数,这样Python就可以调用由Go语言编写的函数进行操作。例如。

创建go项目
mkdir go-calc
cd go-calc
go mod init calc
echo "package main" > "main.go"
编写go函数
main.go
package main

import "C"

//export add_int
func add_int(a, b C.int) C.int{
return a + b
}

//export add_float
func add_float(a, b C.float) C.float{
return a + b
}
[kod.ustore168.com)
[kod.szhair.net)
[kod.adk88.net)
[kod.hnhfhfs.com)
[kod.fxlantian.com)
[kod.cqmini.com)
[kod.0851jiu.com)

//export add_str
func add_str(a,b C.char) C.char{
c := C.GoString(a) + C.GoString(b)
return C.CString(c)
}

func main(){

}
注意,每个函数上必须用//export 函数名进行导出,外部才能调用,函数名无需首字母大写

编译成C动态链接库
在项目根目录下运行
go build -buildmode=c-shared -o calc.so
使用Python调用Go函数
新建call_go.py
import ctypes

lib = ctypes.CDLL("./calc.so")
print(lib.add_int(3, 5))

lib.add_float.argtypes = [ctypes.c_float, ctypes.c_float]
lib.add_float.restype = ctypes.c_float
print(lib.add_float(3.5, 5.2))

lib.add_str.argtypes = [ctypes.c_char_p, ctypes.c_char_p]
lib.add_str.restype = ctypes.c_char_p
print(lib.add_str(b'Hello', b'World'))
运行后输出如下:

8
8.699999809265137
b'HelloWorld'
注:浮点数相加不准确是计算机计算一个常见问题

相关文章
|
2天前
|
Linux 编译器 Go
cgo--在Go中链接外部C库
cgo--在Go中链接外部C库
|
2天前
|
SQL Rust Go
Python通过C动态链接库调用C语言函数
Python通过C动态链接库调用C语言函数
|
2天前
|
存储 Kubernetes Go
Go语言项目组织架构
Go语言项目组织架构
|
2天前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
12 0
|
机器学习/深度学习 人工智能 安全
Go vs Python,我该选哪一门语言?
哪个更好,Python 还是 Go?你今天应该学习哪种语言,为什么?两者在性能、易学习性、可扩展性和快速原型设计方面如何比较?让我们在 Python 和 Go 的这个友好且易于访问的概述中找出答案。
Go vs Python,我该选哪一门语言?
|
Java Linux Go
再见,Python!你好,Go语言
Go 语言诞生于谷歌,由计算机领域的三位宗师级大牛 Rob Pike、Ken Thompson 和 Robert Griesemer 写成。由于出身名门,Go 在诞生之初就吸引了大批开发者的关注。诞生十年以来,已经涌出了很多基于 Go 的应用。
2242 0
|
1天前
|
人工智能 数据挖掘 Serverless
探索Python编程:从基础到实战
【10月更文挑战第2天】本文将带你走进Python的世界,了解它的基本语法、数据结构、函数等核心概念,并通过实例演示如何应用这些知识解决实际问题。无论你是编程新手还是有一定经验的开发者,都能在这篇文章中找到有价值的内容。让我们一起开启Python编程之旅吧!
|
2天前
|
机器学习/深度学习 存储 数据挖掘
探索Python编程之美:从基础到进阶的旅程
【10月更文挑战第2天】本文旨在通过浅显易懂的方式,带领读者走进Python编程的世界。我们将从Python的基础语法开始,逐步深入到面向对象编程、异常处理等高级主题,最后探讨如何将Python应用于实际项目中。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。
|
2天前
|
Linux 开发者 iOS开发
告别兼容烦恼!Python系统编程中的跨平台艺术大师🎨
【10月更文挑战第2天】Python 以其强大的跨平台能力成为系统编程领域的艺术大师,有效解决了不同操作系统间的兼容性问题,让开发者能专注于业务逻辑而非平台差异。通过内置的 `os`、`platform` 和 `subprocess` 模块,以及第三方库如 `pathlib`,Python 能轻松处理文件系统操作、执行外部命令等任务。此外,Python 还提供了 Tkinter、PyQt 等库支持跨平台 GUI 开发,确保应用程序在 Windows、macOS 和 Linux 上均能正常运行。Python 的强大工具链使其在跨平台编程领域中持续引领新潮流。
12 4
|
1天前
|
索引 Python
Python学习笔记编程小哥令狐~持续更新、、、(上)
Python学习笔记编程小哥令狐~持续更新、、、(上)
13 2