ファイル判別などでstringsパッケージを使ってましたがpath/filepath
を使ったら楽だったのでメソッド一覧を試してみました。
パッケージの説明を眺めるだけでも良かったけど、全部にサンプルがあるわけでもないし今後使うためには実際に使っておきたい。
確認用コードを書いてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
package main import( "fmt" "path/filepath" ) func main(){ var r,abs string //返値用 var rs []string //返値用 var path = "123/..\\abc/def/gh.i" //確認用のごちゃまぜパス /*-- stringとして処理する --*/ //ファイル名 r = filepath.Base(path) fmt.Println(r) //=> gh.i //ディレクトリ名 r = filepath.Dir(path) fmt.Println(r) //=>abc\def //.拡張子 r = filepath.Ext(path) fmt.Println(r) //=> .i //絶対パス(実行場所依存) abs, err := filepath.Abs(path) fmt.Println(abs,err) //=> C:\Users\xxx/yyy\abc\def\gh.i <nil> //指定場所からの相対パス r, err = filepath.Rel("./abc",path) fmt.Println(r, err) //=> def\gh.i <nil> //最短パス(これだけ使うことあるのかな) r = filepath.Clean(path) fmt.Println(r) //=> abc\def\gh.i //スラッシュ区切りにする r = filepath.ToSlash(path) fmt.Println(r) //=> 123/../abc/def/gh.i //スラッシュ区切りからデフォルト区切りにする r = filepath.FromSlash(r) fmt.Println(r) //=> 123\..\abc\def\gh.i //先頭文字が指定したものか確認 filepath.HasPrefix(path,"123") fmt.Println(r) //=> true //ディレクトリとファイル名を分ける _f,_dir := filepath.Split(path) fmt.Println(_f,",",_dir) //=>123/..\abc/def/ , gh.i //複数ファイル名を分割 var paths= "a.jpg;b.gif;c.png" rs = filepath.SplitList(paths) fmt.Println(rs) //=> [a.jpg b.gif c.png] //ボリューム名を取得 r = filepath.VolumeName(abs) fmt.Println(r) //=> C: //OSのUNCに沿った形式につなげて返す(windowsだとstrings.join(strs,"\")と同じ) r = filepath.Join("abc","def","gh.i") fmt.Println(r) //=> abc\def\gh.i /*-- 実ファイルシステムとして処理する --*/ //パターンに合うファイル名一覧を取得 rs, err = filepath.Glob("*") fmt.Println(rs) //=> [実行ディレクトリ内のファイル/ディレクトリ一覧] //シンボリックリンク先パスを返す。windowsだとショートカットじゃなくてmklinkされたもの //結果はCleanされたもの(最短パス)になる。 r, err = filepath.EvalSymlinks("../work/cordova-app/textimage/www") fmt.Println(r) //=> リンク先パス } |
Base()
, Dir()
, Ext()
はよく使いそうです。
知らないだけで色々便利なパッケージがあるんだろうなと思う。
パッケージ全部読むのもつらそうなので有名なパッケージとかのソースを呼んで知識を増やしておかないと。