从Go函数返回CGo String到Python程序

时间:2018-03-08 10:17:27

标签: python c go

所以我试图将go函数的字符串结果返回给python字符串。到目前为止,我从go返回一个*C.char并将其转换为python,我只是在解除指针的引用时遇到了麻烦,因为这是我在python中不熟悉的东西。

参加:

package main

import "C"

import (
    "fmt"
)

//export HelloGo
func HelloGo(a string) *C.char {
    fmt.Println("Go recieved:", a)
    return C.CString(fmt.Sprintf("Hello from Go, %s!", a))
}

func main() {}

Python部分:

import ctypes as c

text = b"PYTHON MESSAGE"

lib = c.cdll.LoadLibrary("./hey.so")

class GoString(c.Structure):
    _fields_ = [("p", c.c_char_p), ("n", c.c_longlong)]

lib.HelloGo.argtypes = [GoString]
gs = GoString(text, len(text))
result = c.c_char_p(lib.HelloGo(gs))

print("Python reads:", result)

输出:

Go recieved: PYTHON MESSAGE
Python reads: c_char_p(4607968)

我尝试过使用result.valuec_string_from(result),但这会给我一个细分错误。我在C程序中获得结果没有任何困难,并且理解我可以编写一个Python扩展来检索它,但这看起来有点复杂。

0 个答案:

没有答案