亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過節點調用golang函數時無法打開文件

通過節點調用golang函數時無法打開文件

Go
SMILET 2023-05-08 18:05:33
我按照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"))


查看完整回答
反對 回復 2023-05-08
  • 1 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號