• 15常用标准库之path/filepath


    一、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)
    }
    
    
  • 相关阅读:
    Oracle Yum源
    Linux Centos7使用ping命令ping不通网络的解决方案
    Oracle 11G DBMS包和类型参考
    (转载)linux下Yum的$releasever和$basearch的取值
    IDEA 配置Tomcat乱码解决方法
    C# .NET Framework 3.5 下 Thread 与 Semaphore 的简单例子
    C# .NET Framework 3.5 下 Task 与 EventWaitHandle 的简单例子
    Notepad ++ 去//注释的方法
    Clip Studio Paint(优动漫)如何提取线稿?
    C# .NET Framework 3.5 下 Task 与 Semaphore 的简单例子
  • 原文地址:https://www.cnblogs.com/liuqingzheng/p/16124137.html
Copyright © 2020-2023  润新知