こんにちは、kurumi-bioです。
第2回目のfilepathパッケージ(標準ライブラリー)の学習です。
前回の記事
APIリファレンス(過去記事の一覧)
環境
- Windows
OSバージョン:Windows11 Home 22H2
Go言語のバージョン:go version go1.20.3 windows/amd64 - Linux
OSバージョン:openSUSE Leap 15.4
Go言語のバージョン:go version go1.20.3 linux/amd64
コードの説明
ファイルパスの情報を取得する関数ですので、色々な形式のパスを渡して結果を確認してみました。
EvalSymlinks関数
func EvalSymlinks(path string) (string, error)
package main import ( "fmt" "path/filepath" "runtime" ) func printResult(pathString string) { s, e := filepath.EvalSymlinks(pathString) if e != nil { fmt.Printf("EvalSymlinks Error\n\tpath=[%s]\n\terror=[%v]\n", pathString, e) } else { fmt.Printf("[%s] -> [%s]\n", pathString, s) } } func main() { printResult("test") if runtime.GOOS == "windows" { printResult("E:/Go言語/44/HardLink-File") printResult("E:/Go言語/44/HardLink-File_Relative") printResult("E:/Go言語/44/Junction") printResult("E:/Go言語/44/SymLink-Dir") printResult("E:/Go言語/44/SymLink-File") printResult("E:/Go言語/44/SymLink-File_Relative") printResult("E:/Go言語/44/SymLink-NonFile") } else if runtime.GOOS == "linux" { printResult("/home/kurumi/Go/44/TEST/HardLink-File") printResult("/home/kurumi/Go/44/TEST/HardLink-File_Relative") printResult("/home/kurumi/Go/44/TEST/SymLink-Dir") printResult("/home/kurumi/Go/44/TEST/SymLink-File") printResult("/home/kurumi/Go/44/TEST/SymLink-File_Relative") printResult("/home/kurumi/Go/44/TEST/SymLink-NonFile") } }
◆実行結果(Windows)
◆実行結果(Linux)
Ext関数
func Ext(path string) string
package main import ( "fmt" "path/filepath" ) func printResult(pathString string) { s := filepath.Ext(pathString) fmt.Printf("[%s] -> [%s]\n", pathString, s) } func main() { printResult("test") printResult("c:/") printResult("c:/test.txt") printResult("c:/test.txt.bat") printResult("test") printResult("/") printResult("/test.txt") printResult("/test.txt.bat") }
◆実行結果(Windows)
◆実行結果(Linux)
FromSlash関数
func FromSlash(path string) string
package main import ( "fmt" "path/filepath" ) func printResult(pathString string) { s := filepath.FromSlash(pathString) fmt.Printf("[%s] -> [%s]\n", pathString, s) } func main() { printResult("test") printResult("/") printResult("/test1/test1.txt") printResult("\\test2\\test2.txt") printResult("\\test3/test3.txt") }
◆実行結果(Windows)
◆実行結果(Linux)
Glob関数
func Glob(pattern string) (matches []string, err error)
package main import ( "fmt" "path/filepath" "runtime" ) func printResult(pathString string) { s, e := filepath.Glob(pathString) if e != nil { fmt.Printf("EvalSymlinks Error : path=[%s]/ error=[%s] %v\n", pathString, e) } else { fmt.Printf("pattern=[%s]\n", pathString) for i, p := range s { fmt.Printf("\tmatches[%d]=[%s]\n", i, p) } } } func main() { if runtime.GOOS == "windows" { printResult("C:/P*") } else if runtime.GOOS == "linux" { printResult("/home/kurumi/Go/44/E*") } printResult("e*") printResult("E*") }
◆実行結果(Windows)
◆実行結果(Linux)
最後に
今回もパス文字列操作という感じで地味な感じでした。
この中で使えそうなのは、EvalSymlinks関数とExit関数かと思います。
特にExit関数は、Windows環境は拡張子が重要なので使うことが多いかと思います。
最後までご覧いただきありがとうございます