我按照https://medium.com/learning-the-go-programming-language/calling-go-functions-from-other-languages-4c7d8bcc69bf中的教程使我的節(jié)點應用程序能夠調用 golang 函數(shù)。提供的示例就像一個魅力。但是,我確實無法在另一種情況下實施。在這里,我想通過僅提供絕對路徑來打開一個文件并調用 Go 的函數(shù),但它總是告訴我由于沒有這樣的文件而無法找到該文件。我試圖直接在 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條經(jīng)驗 獲得超6個贊
請記住,Go 中的字符串就像切片。它們由指向支持數(shù)據(jù)的指針和長度組成。這就是為什么在您的代碼中GoString定義為:
var GoString = Struct({
p: "string", // pointer
n: "longlong" // length
});
我建議你定義一個函數(shù)來創(chuàng)建一個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 關注
- 139 瀏覽
添加回答
舉報
0/150
提交
取消