ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

15-常用标准库之-path/filepath

2022-04-09 23:00:35  阅读:179  来源: 互联网

标签:15 string filepath fmt 路径 go path dir


一、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)
}

标签:15,string,filepath,fmt,路径,go,path,dir
来源: https://www.cnblogs.com/liuqingzheng/p/16124137.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有