...

パッケージ path

概要 ▾

path パッケージは,スラッシュで区切られたパスを操作する便利関数を実装します。

パスパッケージは, URL 内のパスなど,スラッシュで区切られたパスにのみ使用してください。 このパッケージは,ドライブ文字やバックスラッシュを含む Windows のパスを扱いません。 オペレーティングシステムのパスを操作するには,path/filepath パッケージを使用します。

変数

ErrBadPattern は,パターンが不正な形式であることを示します。

var ErrBadPattern = errors.New("syntax error in pattern")

func Base

func Base(path string) string

Base は,path の最後の要素を返します。 末尾のスラッシュは,最後の要素を抽出する前に削除されます。 path が空の場合, Base は "." を返します。 path がすべてスラッシュで構成されている場合, Base は "/" を返します。

コード:

fmt.Println(path.Base("/a/b"))
fmt.Println(path.Base("/"))
fmt.Println(path.Base(""))

出力:

b
/
.

func Clean

func Clean(path string) string

Clean は純粋な語彙処理によって path と等価な最短パス名を返します。 それ以上処理ができなくなるまで,以下の規則を繰り返し適用します。

1. 複数のスラッシュを 1 つのスラッシュに置き換える。
2. . パス名を削除する (カレントディレクトリ)
3. 内部の .. パス名とその前にある .. でない要素を削除する (親ディレクトリ)
4. ルートパスで始まる .. 要素を削除する。
   つまり,パスの最初の "/.." を "/" で置換する。

返されるパスは,ルート "/" の場合にのみスラッシュで終わります。

このプロセスの結果が空の文字列の場合, Clean は文字列 "." を返します。

RobPike, "Plan9 のレキシカルファイル名またはドットドットを正しく扱う" (https://9p.io/sys/doc/lexnames.html) も参照してください。

コード:

paths := []string{
    "a/c",
    "a//c",
    "a/c/.",
    "a/c/b/..",
    "/../a/c",
    "/../a/b/../././/c",
    "",
}

for _, p := range paths {
    fmt.Printf("Clean(%q) = %q\n", p, path.Clean(p))
}

出力:

Clean("a/c") = "a/c"
Clean("a//c") = "a/c"
Clean("a/c/.") = "a/c"
Clean("a/c/b/..") = "a/c"
Clean("/../a/c") = "/a/c"
Clean("/../a/b/../././/c") = "/a/c"
Clean("") = "."

func Dir

func Dir(path string) string

Dir は,path の最後の要素を除くすべての要素 (通常は path のディレクトリ) を返します。 Split を使用して最後の要素を削除した後,path は Clean され,末尾のスラッシュは削除されます。 path が空の場合, Dir は "." を返します。 path 全体がスラッシュの部分とそれに続く非スラッシュバイトで構成されている場合, Dir は 1 つのスラッシュを返します。 それ以外の場合,返されるパスはスラッシュで終わりません。

コード:

fmt.Println(path.Dir("/a/b/c"))
fmt.Println(path.Dir("a/b/c"))
fmt.Println(path.Dir("/a/"))
fmt.Println(path.Dir("a/"))
fmt.Println(path.Dir("/"))
fmt.Println(path.Dir(""))

出力:

/a/b
a/b
/a
a
/
.

func Ext

func Ext(path string) string

Ext (拡張子) は,path で使用されているファイル名拡張子を返します。 拡張子は,path のスラッシュで区切られた最後の要素の最後のドットから始まるサフィックスです。 ドットがない場合は空です。

コード:

fmt.Println(path.Ext("/a/b/c/bar.css"))
fmt.Println(path.Ext("/"))
fmt.Println(path.Ext(""))

出力:

.css

func IsAbs

func IsAbs(path string) bool

IsAbs は path が絶対パスかどうかを報告します。

コード:

fmt.Println(path.IsAbs("/dev/null"))

出力:

true

func Join

func Join(elem ...string) string

Join (結合) は,必要に応じてスラッシュを追加して,任意の数のパス要素を 1 つのパスに結合します。 返り値は Clean されています。 特に,空の文字列はすべて無視されます。

コード:

fmt.Println(path.Join("a", "b", "c"))
fmt.Println(path.Join("a", "b/c"))
fmt.Println(path.Join("a/b", "c"))
fmt.Println(path.Join("", ""))
fmt.Println(path.Join("a", ""))
fmt.Println(path.Join("", "a"))

出力:

a/b/c
a/b/c
a/b/c

a
a

func Match

func Match(pattern, name string) (matched bool, err error)

Match は name が pattern と一致するかどうかを報告します。 pattern の構文は次のとおりです。

pattern:
	{ term }
term:
	'*'         / 以外の文字のシーケンスにマッチする
	'?'         / 以外の 1 文字にマッチする
	'[' [ '^' ] { character-range } ']'
	            文字クラス (空であってはいけません)
	c           文字 c にマッチする (c != '*', '?', '\\', '[')
	'\\' c      文字 c にマッチする

character-range:
	c           文字 c にマッチする (c != '\\', '-', ']')
	'\\' c      文字 c にマッチする
	lo '-' hi   lo <= c <= hi の文字 c にマッチする

Match は,pattern が name の部分文字列だけでなく,すべてに一致する必要があります。 返される可能性がある唯一のエラーは ErrBadPattern です。 それは,pattern が不正な形式の場合です。

コード:

fmt.Println(path.Match("abc", "abc"))
fmt.Println(path.Match("a*", "abc"))
fmt.Println(path.Match("a*/b", "a/c/b"))

出力:

true <nil>
true <nil>
false <nil>

func Split

func Split(path string) (dir, file string)

Split (分割) は,最後のスラッシュの直後のパスを分割し,ディレクトリとファイル名に分けます。 パスにスラッシュがない場合, Split は空の dir と file を path に設定して返します。 返される値は,path = dir+file となります。

コード:

fmt.Println(path.Split("static/myfile.css"))
fmt.Println(path.Split("myfile.css"))
fmt.Println(path.Split(""))

出力:

static/ myfile.css
 myfile.css

サブディレクトリ

名前 概要
..
filepath filepath パッケージは,対象 OS のファイルパスに互換性のある仕方で,ファイル名パスを操作する便利関数を実装します。