我正在从Python调用Go函数。 Go函数返回一个字符串,具体来说是一个GoString
,其中字符串本身是在Go的一侧分配的。
谁负责释放这段记忆?
以下是一个非常简化的例子。
走边:
func Create(optsEncoded string) (res string, serr string) {
opts := map[string]interface{}{}
if err := json.Unmarshal([]byte(optsEncoded), &opts); err != nil {
return "", errWithStack(err)
}
options := translateCreateOptions(opts)
result := ...
payload, err := json.Marshal(result)
if err != nil {
return "", errWithStack(err)
}
return string(payload), ""
}
Cython绑定:
cpdef object py_create(object items, bytes options):
cdef GoString opts = ...
cdef bytes message
cdef Create_return result = Create(opts)
if result.r0.n == 0:
message = result.r1.p
raise Exception("Something happened")
message = result.r0.p
# Do I need to deallocate result.r0 and result.r1?
return message.decode("utf-8")