golang标准库path/filepath使用示例

devtools/2025/1/21 3:00:25/

文章目录

  • 前言
  • 一、常用方法示例
    • 1.将相对路径转换为绝对路径
    • 2.获取路径中最后一个元素
    • 3.获取路径中除去最后一个元素的部分
    • 4.路径拼接
    • 5.将路径拆分为目录和文件名两部分
    • 6.返回一个相对路径
    • 7.文件路径遍历
    • 8.根据文件扩展名过滤文件
    • 9.使用正则表达式进行路径匹配


前言

path/filepath包是一个非常重要的工具包,它提供了一系列函数用于操作和处理文件路径。在实际运维工具开发中肯定会涉及构建文件路径、解析路径中的各个部分、还是遍历目录树、读取文件等操作,path/filepath包都提供了便捷的方法来实现这些功能。
参考文档: https://pkg.go.dev/path/filepath


一、常用方法示例

1.将相对路径转换为绝对路径

代码如下(示例):

func Abs(path string) (string, error)
使用Abs方法实现,接收一个string类型参数返回string类型和错误package mainimport ("fmt""path/filepath"
)func main() {//相对路径relativePath := "./graylog/docker-compose.yml"absolutePath, err := filepath.Abs(relativePath)if err != nil {fmt.Println("Error:", err)}//绝对路径fmt.Println("Absolute Path:", absolutePath)
}

在这里插入图片描述

2.获取路径中最后一个元素

代码如下(示例):

// func Base(path string) string
// 如果路径为空字符串,Base返回.
// 相当于获取目录下的子文件或子目录
package mainimport ("fmt""path/filepath"
)func main() {relativePath := "/var/log/message"absolutePath := filepath.Base(relativePath)fmt.Println("Absolute Path:", absolutePath)
}

在这里插入图片描述

3.获取路径中除去最后一个元素的部分

代码如下(示例):

// func Dir(path string) string
// Dir函数返回路径中除去最后一个元素的部分,即路径的目录部分。如果路径为空字符串,Dir返回.
// 相当于获取某个文件或目录的父级目录
package mainimport ("fmt""path/filepath"
)func main() {relativePath := "/export/graylog/es_data"absolutePath := filepath.Dir(relativePath)fmt.Println("Absolute Path:", absolutePath)
}

在这里插入图片描述

4.路径拼接

代码如下(示例):

func Join(elem ...string) string
// 将任意数量的路径元素连接成一个单一路径,并根据需要添加斜杠package mainimport ("fmt""path/filepath"
)func main() {path1 := "/export/graylog"path2 := "es_data"fullPath := filepath.Join(path1, path2)fmt.Println("Full Path:", fullPath)
}

在这里插入图片描述

5.将路径拆分为目录和文件名两部分

代码如下(示例):

func Split(path string) (dir, file string)package mainimport ("fmt""path/filepath"
)func main() {path := "/export/graylog/docker-compose.yml"dir, file := filepath.Split(path)fmt.Println("Directory:", dir)fmt.Println("File:", file)
}

在这里插入图片描述

6.返回一个相对路径

代码如下(示例):

func Rel(basepath, targpath string) (string, error)
// 将base目录作为起点,目标目录作为终点package mainimport ("fmt""path/filepath"
)func main() {basepath := "/export"targpath := "/export/graylog/docker-compose.yml"relativePath, err := filepath.Rel(basepath, targpath)if err != nil {fmt.Println("Error:", err)}fmt.Println("Relative Path:", relativePath)
}

在这里插入图片描述

7.文件路径遍历

代码如下(示例):

// Walk和WalkDir函数用于遍历指定目录下的所有文件和子目录,并在遍历过程中打印每个访问的路径
func Walk(root string, walkFn WalkFunc) error
func WalkDir(root string, walkFn WalkDirFunc) errorpackage mainimport ("fmt""os""path/filepath"
)func main() {root := "/export/graylog"err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {if err != nil {return err}fmt.Println("Visited:", path)return nil})if err != nil {fmt.Println("Error:", err)}
}

该处使用的url网络请求的数据。

8.根据文件扩展名过滤文件

代码如下(示例):

// 在WalkFunc中添加条件来过滤特定扩展名的文件
package mainimport ("fmt""os""path/filepath"
)func main() {root := "/export"err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {if err != nil {return err}if filepath.Ext(path) == ".yml" {fmt.Println("Visited:", path)}return nil})if err != nil {fmt.Println("Error:", err)}
}

在这里插入图片描述

9.使用正则表达式进行路径匹配

代码如下(示例):

package mainimport ("fmt""os""path/filepath""regexp"
)func main() {// 目录路径dir := "/export/graylog"// 正则表达式,用来匹配 .yml 或 .xml 结尾的文件pattern := `\.yml$|\.xml$`re, err := regexp.Compile(pattern)if err != nil {fmt.Println("Error compiling regex:", err)return}// 使用 filepath.Walk 遍历目录及子目录err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {if err != nil {fmt.Println("Error walking path:", err)return err}// 如果是文件且符合后缀名要求,进行匹配if !info.IsDir() && re.MatchString(info.Name()) {fmt.Println("Matched file:", path)}return nil})if err != nil {fmt.Println("Error during Walk:", err)}
}

在这里插入图片描述



http://www.ppmy.cn/devtools/152247.html

相关文章

如何将本地电脑上的文件夹设置为和服务器的共享文件夹

将本地电脑上的文件夹设为与服务器共享的文件夹,通常是在本地开启文件共享,并配置相应的权限,使服务器可以访问该文件夹。以下以 Windows 系统为例说明具体操作步骤: 一、在本地电脑上设置共享文件夹 选择文件夹 找到需要共享的文…

ARM学习(42)CortexM3/M4 MPU配置

笔者之前学习过CortexR5的MPU配置,现在学习一下CortexM3/M4 MPU配置 1、背景介绍 笔者在工作中遇到NXP MPU在访问异常地址时,就会出现总线挂死,所以需要MPU抓住异常,就需要配置MPU。具体背景情况可以参考ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连…

广东打造低空经济发展平台,CES Asia 2025助力科技腾飞

在2025年广东省政府工作报告中明确提出,将打造“13N”低空经济发展平台,致力于完善低空智慧物流、城市空中交通、航空应急救援等体系,这一举措标志着广东在低空经济领域的雄心壮志。 广东作为全国经济强省,在低空经济领域已经拥有…

Node.js 版本管理工具完全指南

Node.js 版本管理工具完全指南 目录 1. nvm (Node Version Manager)2. n (Node Package Manager)3. fnm (Fast Node Manager)4. Volta5. 工具对比 1. nvm (Node Version Manager) 1.1 安装指南 macOS/Linux # 使用 curl 安装 curl -o- https://raw.githubusercontent.com…

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇:一文大白话讲清楚啥是个webpack第二篇:一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建然后看本篇,Loader的配置…

【Rust自学】13.8. 迭代器 Pt.4:创建自定义迭代器

13.8.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发,而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中,我们会讨论 Rust 的一…

OA-CNN:用于 3D 语义分割的全自适应稀疏 CNN

大家读完觉得有帮助记得及时关注和点赞!!! 1介绍 2相关工作 基于点的学习。 基于 CNN 的学习。 动态卷积。 3全能自适应 3D 稀疏 CNN 3.1空间适应性感受野 赋予动机。 体素网格。 金字塔网格分区。 Adaptive 聚合器。 3.2自适应关…

VScode侧边栏左下角,没有NPM脚本,如何打开???

1.打开设置 2.用户->扩展->Npm 3.设置好了以后重启vscode,打开package.json文件,右上角的三个点就能看到