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

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

如何獲取相對于導入包路徑的文件路徑?

如何獲取相對于導入包路徑的文件路徑?

Go
慕妹3146593 2021-10-18 17:15:59
問題是我無法訪問相對于實際使用的包路徑的文件。讓我們考慮這個例子。我有以下結構:~/go/src/github.com/user/dbms  data/    database.db  dbms.go~/projects/myproj/bin  main.godbms.go :package dbmsimport (  "os"  "fmt"  "path/filepath")type dbms struct {  filepath string}func New() *dbms {  return &dbms{filepath: "./data/database.db"}}func (d *dbms) Run() {  fmt.Println(filepath.Abs(d.Path))  // output: /home/timur/projects/myproj/bin/data  // I need: /home/timur/go/src/github.com/user/dbms/data  file, err := os.OpenFile(d.filepath, os.O_RDWR, 0666)  // error}main.go :package mainimport (  "github.com/user/dbms")func main() {  db := dbms.New()  db.Run()}如您所見,dbms.Path解析相對于入口點的路徑而不是包本身。我怎么了?
查看完整描述

2 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

問題是您的數據庫文件將不是已編譯二進制文件的一部分。當您運行代碼時,您似乎希望它與二進制文件一起打包。

我認為你應該重新考慮你的方法。您的源代碼將被編譯為要運行的靜態二進制文件,但該二進制文件將不包含您的數據庫文件。嘗試可靠地猜測正確的路徑會很麻煩。

我會將數據庫文件的路徑移動到配置參數中,或者在運行時需要位于當前工作目錄中的配置文件中,或者作為環境變量。然后,將數據庫文件從包目錄中拉出,因為它在那里不會幫助您。

至于在運行時最初獲取文件,您只需添加一個設置函數,該函數將根據需要為您的數據庫提供支架?;蛘撸绻M跀祿熘杏幸恍╊A加載的數據,只需將它與最終的二進制文件和配置文件放在一個包中即可。

希望有幫助!


查看完整回答
反對 回復 2021-10-18
  • 2 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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