15-常用標準庫之-path/filepath
阿新 • • 發佈:2022-04-09
一、Path包
1.1 常用函式
path實現了對斜槓分隔的路徑進行操作的函式。
func IsAbs(path string) bool // 判斷是否是一個絕對路徑 func Split(path string) (dir, file string) // 將路徑分割為路徑和檔名 func Join(elem ...string) string // 將多個字串合併為一個路徑 func Ext(path string) string // 返回路徑中擴充套件部分 func Base(path string) string // 返回路徑的最後一個元素 func Dir(path string) string // 返回路徑中目錄部分 func Clean(path string) string // 返回同目錄的最短路徑 func Match(pattern, name string) (matched bool, err error) // 正則是否匹配路徑(shell 檔名匹配)
1.2示例
package main import ( "fmt" "path" ) func main() { // 判斷是否是一個絕對路徑 //dir:="/Users/liuqingzheng/go/src/gin_test" file:="/Users/liuqingzheng/go/src/gin_test/static/css/common.css" isABS := path.IsAbs(file) fmt.Println(isABS) // 將路徑分割為路徑和檔名 dir:="/Users/liuqingzheng/go/src/gin_test/static/css/common.css" dir, file := path.Split(dir) fmt.Println(dir, file) // Users/liuqingzheng/go/src/gin_test/static/css/ common.css // 將多個字串合併為一個路徑 dirJoin := path.Join("Users/liuqingzheng/go/src/gin_test/static/", "css", "common.css") fmt.Println(dirJoin) // Users/liuqingzheng/go/src/gin_test/static/css/common.css // 返回路徑中擴充套件 pf:="Users/liuqingzheng/go/src/gin_test/static/css/common.css" fileExt := path.Ext(pf) fmt.Println(fileExt) // .css // 返回路徑的最後一個元素 pf:="Users/liuqingzheng/go/src/gin_test/static/css/common.css" dirBase := path.Base(pf) fmt.Println(dirBase) // common.css // 返回路徑中目錄部分 pf:="Users/liuqingzheng/go/src/gin_test/static/css/common.css" dir := path.Dir(pf) fmt.Println(dir) // Users/liuqingzheng/go/src/gin_test/static/css // 返回同目錄的最短路徑 dir1 := "/usr/../etc/../etc/ssh" fmt.Println(path.Clean(dir1)) // /etc/ssh // 正則是否匹配路徑 isMatch, err := path.Match("*.json", "a.json")// true <nil> //isMatch, err := path.Match("*.xml", "a.json") //false <nil> fmt.Println(isMatch, err) }
二、filepath
2.1 常用函式
filepath 包實現了相容各作業系統的檔案路徑操作函式。
filepath.Separator // 預定義變數,表示路徑分隔符 / filepath.ListSeparator // 預定義變數,表示環境變數分隔符 : func Abs(path string) (string, error) // 返回path 相對當前路徑的絕對路徑 func Clean(path string) string // 返回path 的最短路徑 func Rel(basepath, targpath string) (string, error) // 返回targpath 相對 basepath路徑 func EvalSymlinks(path string) (string, error) // 返回軟鏈指向的路徑 func VolumeName(path string) string // 返回路徑最前面的卷名 func ToSlash(path string) string // 路徑分隔符替換為 / func FromSlash(path string) string // / 替換為路徑分隔符 func SplitList(path string) []string // 分隔環境變數裡面的路徑 func Walk(root string, walkFn WalkFunc) error // 遍歷 root 目錄下的檔案樹,並呼叫 walkFunc
2.2 示例
package main
import (
"fmt"
"io/fs"
"os"
"path/filepath"
)
func main() {
// 預定義變數
fmt.Println(string(filepath.Separator), string(filepath.ListSeparator)) // / :
// 返回path 相對當前路徑的絕對路徑
dir := "~/go/src/gin_test"
//dir := "/Users/liuqingzheng/go/src/gin_test/"
realDir, _ := filepath.Abs(dir)
fmt.Println(realDir)
// /Users/liuqingzheng/go/src/gin_test/~/go/src/gin_test
// 返回path 的最短路徑
dir := "/usr/../etc/../tmp"
clear_dir := filepath.Clean(dir)
fmt.Println(clear_dir) // \tmp
// 返回basePath 相對 targPath路徑
basePath, targPath := "/usr/local", "/usr/local/go/bin"
relDir, err := filepath.Rel(basePath, targPath)
fmt.Println(relDir, err) // go/bin <nil>
// 返回軟鏈指向的路徑
symlink := "/usr/local/bin/python3"
realDir, err := filepath.EvalSymlinks(symlink)
fmt.Println(realDir, err) // /Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8 <nil>
// 返回路徑最前面的卷名
// Given "C:\foo\bar" it returns "C:" on Windows.
// Given "\\host\share\foo" it returns "\\host\share".
root := "/Users/liuqingzheng/go/src/gin_test"
//root := `C:\foo\bar`
vol := filepath.VolumeName(root)
fmt.Println(vol)
// 路徑分隔符替換為 `/`
root := "/usr/local/go"
slash_dir := filepath.ToSlash(root)
fmt.Println(slash_dir) // /usr/local/go
// `/` 替換為路徑分隔符
slash_dir:="/usr/local/go"
from_slash := filepath.FromSlash(slash_dir)
fmt.Println(from_slash) // \usr\local\go
// 分隔環境變數裡面的路徑
env_path := "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/go/bin"
env_slice := filepath.SplitList(env_path)
for k, v := range env_slice {
fmt.Println(k, v)
}
// 0 /usr/local/bin
// 1 /usr/bin
// 2 /bin
// 3 /usr/sbin
// 4 /sbin
// 5 /opt/X11/bin
// 6 /usr/local/go/bin
// 遍歷 root 目錄下的檔案樹,並呼叫 walkFn
root_dir, err := os.Getwd()
err = filepath.Walk(root_dir, func(path string, info fs.FileInfo, err error) error {
fmt.Println(path)
return nil
})
fmt.Println(err)
}