我正在用golang編寫一個命令行工具,它將一個文件作爲參數。我怎樣才能準確地把這個參數變成一個可用的文件?似乎有許多情況處理:Golang:如何解析文件名參數?
- 絕對路徑已經給出,並且是
- 相對路徑已被賦予我應該使用它,並與我應該path.Join()它目前的工作目錄
- 「。」的和路徑中使用了「../」,我相信我仍然應該使用path.Join()和Go會簡化路徑嗎?
是否提供任何處理這個?我應該根據第一個字符是'/'來分支嗎?這似乎是一個拙劣的解決方案,但也許它總是有效,應該這樣做?
我正在用golang編寫一個命令行工具,它將一個文件作爲參數。我怎樣才能準確地把這個參數變成一個可用的文件?似乎有許多情況處理:Golang:如何解析文件名參數?
是否提供任何處理這個?我應該根據第一個字符是'/'來分支嗎?這似乎是一個拙劣的解決方案,但也許它總是有效,應該這樣做?
撇開你不想看到.
作爲一個文件,沒有太多值得擔心的。
在值得信賴的環境*中,用戶確實可以指向任何文件,os
包將負責處理該問題。沒有必要filepath.Join
什麼。
/
開始).
和./
)(*)在非信任的環境(例如Web服務器),你會想驗證授權給出的路徑。
操作系統爲您解釋路徑。你不需要對路徑名做任何事情。你可以簡單地做這樣的事情:
os.Open("./path/to/file")
os.Open("another/file")
os.Open("../some_file")
等等
OS確實爲你努力工作。然而,通過參數可能可以對應一個目錄。您應該檢查os.FileInfo.IsDir
,或者對path.filepath.Walk()
執行path.filepath.WalkFunc()
批量操作。後者是相當普遍的做法。
只需使用viper:github.com/spf13/viper – fabrizioM
@fabrizioM對於對'os.Open' /'os.Create'的簡單/平凡的調用來說是巨大的*矯枉過正。 –