golangの日記

Go言語を中心にプログラミングについてのブログ

Go言語(golang) filepathでパスを扱う

golang.png


filepathパッケージを使用したパスの扱い方と、使わずに分割してみたりする。





filepathパッケージを使ってパスを分割

package main

import (
    "path/filepath"
)

func main() {
    name := "/path/to/dir/filename.txt"

    extname := filepath.Ext(name)
    println(extname) // .txt

    basename := filepath.Base(name)
    println(basename) // filename.txt

    dirname := filepath.Dir(name)
    println(dirname) // /path/to/dir

    dirname, basename = filepath.Split(name)
    println(basename) // filename.txt
    println(dirname)  // /path/to/dir/  (Dir と違って最後に / が付いてる)
}



filepathパッケージを使用せずに分割

forでパスをディレクトリ、ファイル名(拡張子あり)、ファイル名(拡張子なし)、拡張子に分割(Windowsは無視)

package main

func main() {
    name := "/path/to/dir/filename.txt"

    begin, end := 0, 0
    for i := len(name) - 1; i >= 0; i-- {
        if name[i] == '/' {
            begin = i + 1
            break
        }
        if name[i] == '.' {
            end = i
        }
    }

    println(name[begin:])    // filename.txt
    println(name[begin:end]) // filename
    println(name[:begin])    // /path/to/dir/
    println(name[end:])      // .txt
}