檔案結構
❯ tree .
.
├── config
│ └── config.go
├── config.yml
└── main.go
1 directory, 3 files
理論上會把讀取相關檔案的邏輯寫在config/config.go, 這時候的路徑如果能以呼叫的地方為出發點會比較不容易搞混
main.go
package main
import (
"log"
)
func main() {
err := config.LoadConfig("./config.yml")
if err != nil {
log.Fatal(err)
}
}
config/config.go
package config
import (
"fmt"
"io/ioutil"
"path/filepath"
"runtime"
)
func LoadConfig(path string) error {
_, file, _, _ := runtime.Caller(1)
content, err := ioutil.ReadFile(filepath.Join(filepath.Dir(file), path))
if err != nil {
return err
}
fmt.Println(string(content)) // for test here
// 解構config之類的操作 ...
return nil
}
即便未來多了其他類似cmd/somecmd/main.go的檔案需要用到config, 也不用擔心呼叫時的資料夾位置, 放心的寫呼叫的檔案本身的相對路徑就對了(σ゚∀゚)σ