go代码
package main
import(
"C"
)
func main(){}
// 上面都是固定的,需要其他包的话自行导入
// 定义函数,可定义多个,每个函数都要export
//export HelloWorld
func HelloWorld(info *C.char) *C.char {
GoStr := C.GoString(info)
GoStr += "123"
return C.CString(GoStr)
}
编译
go build -buildmode=c-shared -o hello.so hello.go
编译后生成hello.so和hello.h,python中只需要so文件。
pythob中调用
# python3
import os
from ctypes import cdll, c_char_p
# 导包
lib = cdll.LoadLibrary(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'hello.so'))
# 获取函数
hello = lib.HelloWorld
hello.argtype = c_char_p
hello.restype = c_char_p
# 调用
print(hello(b"guido"))