所以我试图将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.value
和c_string_from(result)
,但这会给我一个细分错误。我在C程序中获得结果没有任何困难,并且理解我可以编写一个Python扩展来检索它,但这看起来有点复杂。