go path/filepath 包

本文介绍Go语言中的path和filepath包,详细解释了如何使用这些包来处理文件路径,包括路径的分割、合并、简化等常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

go path/filepath 包

1 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) 
}

2 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)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go&Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值