[pkg] runtime
Package runtime @ go.dev
runtime.NumGoroutine()
正確取得檔案的絕對路徑:runtime 搭配 filepath pkg
原始參考程式碼:grpc-go
想要在 server/server.go
中取得正確載入 route_guide_db.json
的檔案,且不論是在資料夾跟目錄執行 go run server/server.go
或在 server 資料夾內執行 go run server.go
都能正確載入:
資料夾結構
.
├── server
│ └── server.go
└── data
├── route_guide_db.json (想要在 server.go 中載入的檔案)
└── data.go
data.go
在 data.go
這隻檔案中:
- 使用
runtime.Caller(0)
可以取得當前檔案的路徑 - 使用
filepath.Dir()
可以取得當前檔案的資料夾 - 使用
filepath.Join()
可以從此資料夾開始撰寫相對路徑
// https://github.com/grpc/grpc-go/blob/master/examples/data/data.go
// data/data.go
package data
import (
"path/filepath"
"runtime"
)
// basepath 是這個 package 的 root directory
var basepath string
func init() {
_, currentFile, _, _ := runtime.Caller(0)
basepath = filepath.Dir(currentFile)
}
// Path 會根據給的 relative file/directory path 回傳絕對路徑(absolute path)
// 如果原本就是絕對路徑,則不做事
func Path(rel string) string {
if filepath.IsAbs(rel) {
return rel
}
return filepath.Join(basepath, rel)
}
main.go
使用時,只需要在 main.go 中載入 data
這個 package,呼叫 data.Path("route_guide_db.json")
即可:
import "sandbox/grpc-go-sandbox/data"
func main() {
absPath := testdata.Path("route_guide_db.json")
}