我按照https://medium.com/learning-the-go-programming-language/calling-go-functions-from-other-languages-4c7d8bcc69bf中的教程使我的节点应用程序能够调用 golang 函数。提供的示例就像一个魅力。但是,我确实无法在另一种情况下实施。在这里,我想通过仅提供绝对路径来打开一个文件并调用 Go 的函数,但它总是告诉我由于没有这样的文件而无法找到该文件。我试图直接在 Go 中运行它并且它有效!我做错了吗,或者这是一个实际的错误/未完成的功能?这是我为 c-style lib 构建的 golang 源代码:package mainimport "C"import ( "bufio" "fmt" "log" "os")func main() {}//export ReadSomethingfunc ReadSomething(filePath string) { file, err := os.Open(filePath) if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) }}我用这个命令构建它:go build -buildmode=c-shared -o simpleread.so main.go
1 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
请记住,Go 中的字符串就像切片。它们由指向支持数据的指针和长度组成。这就是为什么在您的代码中GoString定义为:
var GoString = Struct({
p: "string", // pointer
n: "longlong" // length
});
我建议你定义一个函数来创建一个GoStringeg
function NewGoString(str) {
return new GoString({p: str, n: str.length})
}
您可以在代码中使用它,例如:
var simpleRead = ffi.Library("./simpleread.so", {
ReadSomething: ["void", [GoString]]
});
simpleRead.ReadSomething(NewGoString("/path/to/your/file"))
- 1 回答
- 0 关注
- 104 浏览
添加回答
举报
0/150
提交
取消