【发布时间】:2020-10-28 14:23:13
【问题描述】:
我想从 C 中调用一个返回结构的 Go 函数,并且在 C 中我想处理该结构。
目标是用数据填充结构并返回信息。我不知道哪种格式最好通过。我需要在 C 代码中获取有关返回数据长度的信息,以及结构的每个 str 和 l 值。
(我调用的函数不是strings.Split())。它更复杂,但我需要的返回值是char*和int)
我的 Go 源代码:
package main
import "C"
import (
"fmt"
"strings"
)
type retvalue struct {
str *C.char
l int
}
// This is what I want to achieve (or something similar):
// func Split(input *C.char) []retvalue {
// ...
// ...
// return ret
// }
//export Split
func Split(input *C.char) {
all := strings.Split(C.GoString(input), ",")
ret := []retvalue{}
for _, str := range all {
ret = append(ret, retvalue{str: C.CString(str), l: len(str)})
}
fmt.Printf("%#v\n", ret)
// return ret
}
func main() {}
这是我的 C 代码:
#include "libsplitter.h"
int main(int argc, char const *argv[])
{
char* input="Hello,nice,world";
Split(input);
// do something with the return values from my Split()
return 0;
}
我编译并运行代码(在 macOS 上)
go build -o libsplitter.dylib -buildmode=c-shared main.go
cc splitit.c -o splitit -lsplitter -L.
LD_LIBRARY_PATH=$PWD ./splitit
【问题讨论】:
标签: struct shared-libraries cgo