為什麼要得到絕對路徑?
因為後面上傳檔案的目錄,日誌的目錄,載入模板檔案的目錄都需要這個路徑。
這裡有一點難處理的問題是,需要能同時支援go run xxx.go 執行,以及相對路徑執行./xxxx,和絕對路徑執行 /var/www/xxx
go run 執行是為了在開發的時候,能夠原始碼執行,隨時除錯
絕對路徑執行 /var/www/xxx,是為了在某些情況下,不能執行切換命令的時候,使用絕對路徑去執行檔案
這裡就不解釋獲取目錄的區別了,直接上程式碼
//判斷檔案資料夾不存在
func IsFileNotExist(path string) (bool, error) {
_, err := os.Stat(path)
if os.IsNotExist(err) {
return true, nil
}
return false, err
}
//獲取程式執行目錄
func GetRunPath2() string {
file, _ := exec.LookPath(os.Args[0])
path, _ := filepath.Abs(file)
index := strings.LastIndex(path, string(os.PathSeparator))
ret := path[:index]
return ret
}
//獲取程式根目錄
func GetRootPath() string {
rootPath, _ := os.Getwd()
if notExist, _ := IsFileNotExist(rootPath); notExist {
rootPath = GetRunPath2()
if notExist, _ := IsFileNotExist(rootPath); notExist {
rootPath = "."
}
}
return rootPath
}
這裡先用的第一種方式獲取,如果沒獲取到目錄,就用第二種方式
後面還遇到了哪些問題和知識點將會繼續進行總結。
演示網站:
gofly.sopans.com
本作品採用《CC 協議》,轉載必須註明作者和本文連結