2015-01-13 42 views
-1

我正在用golang編寫一個命令行工具,它將一個文件作爲參數。我怎樣才能準確地把這個參數變成一個可用的文件?似乎有許多情況處理:Golang:如何解析文件名參數?

  • 絕對路徑已經給出,並且是
  • 相對路徑已被賦予我應該使用它,並與我應該path.Join()它目前的工作目錄
  • 「。」的和路徑中使用了「../」,我相信我仍然應該使用path.Join()和Go會簡化路徑嗎?

是否提供任何處理這個?我應該根據第一個字符是'/'來分支嗎?這似乎是一個拙劣的解決方案,但也許它總是有效,應該這樣做?

+0

只需使用viper:github.com/spf13/viper – fabrizioM

+1

@fabrizioM對於對'os.Open' /'os.Create'的簡單/平凡的調用來說是巨大的*矯枉過正。 –

回答

0

撇開你不想看到.作爲一個文件,沒有太多值得擔心的。

在值得信賴的環境*中,用戶確實可以指向任何文件,os包將負責處理該問題。沒有必要filepath.Join什麼。

  • 如果給出了絕對路徑,它會打開它。 (即:從/開始)
  • 如果不是,那麼它會看到它相對於當前工作目錄。 (包括../

(*)在非信任的環境(例如Web服務器),你會想驗證授權給出的路徑。

1

操作系統爲您解釋路徑。你不需要對路徑名做任何事情。你可以簡單地做這樣的事情:

os.Open("./path/to/file") 
os.Open("another/file") 
os.Open("../some_file") 

等等

0

OS確實爲你努力工作。然而,通過參數可能可以對應一個目錄。您應該檢查os.FileInfo.IsDir,或者對path.filepath.Walk()執行path.filepath.WalkFunc()批量操作。後者是相當普遍的做法。