golang 获取程序目录结构

发布时间:2024-12-22 19:32:41

Golang是一种开放源代码的编程语言,它与其他语言相比具有更优秀的并发处理能力和性能。在Golang开发过程中,了解程序目录结构是非常重要的。本文将介绍如何使用Golang获取程序目录结构。

获取当前目录

Golang提供了一个内置的包os,该包包含了与操作系统交互的函数和方法。通过使用os包的Getwd()方法,我们可以获取当前程序所在的目录的绝对路径。下面是示例代码:

package main

import (
	"fmt"
	"os"
)

func main() {
	dir, err := os.Getwd()
	if err != nil {
		fmt.Println("获取目录失败:", err)
		return
	}

	fmt.Println("当前目录:", dir)
}

运行以上代码,将输出当前程序所在的目录的绝对路径。

遍历目录

除了获取当前目录外,我们还经常需要遍历目录中的文件和子目录。Golang提供了filepath包来处理文件路径,同时我们可以使用os包的Readdir()方法来读取目录中的内容。下面是一个示例代码:

package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func visit(path string, info os.DirEntry, err error) error {
	if err != nil {
		fmt.Printf("访问目录失败:%s\n", err)
		return err
	}
	if info.IsDir() {
		fmt.Printf("目录:%s\n", path)
	} else {
		fmt.Printf("文件:%s\n", path)
	}
	return nil
}

func main() {
	err := filepath.WalkDir(".", visit)
	if err != nil {
		fmt.Println("遍历目录失败:", err)
		return
	}
}

运行以上代码,将输出当前目录下的所有文件和子目录。

过滤文件

在实际的开发中,有时我们需要根据一定的条件来过滤目录中的文件。Golang提供了filepath包的Match()方法,支持使用通配符匹配文件名。下面是一个示例代码:

package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func visit(path string, info os.DirEntry, err error) error {
	if err != nil {
		fmt.Printf("访问目录失败:%s\n", err)
		return err
	}
	if info.IsDir() {
		fmt.Printf("目录:%s\n", path)
	} else {
		match, err := filepath.Match("*.txt", info.Name())
		if err != nil {
			fmt.Printf("匹配文件失败:%s\n", err)
			return err
		}
		if match {
			fmt.Printf("文件:%s\n", path)
		}
	}
	return nil
}

func main() {
	err := filepath.WalkDir(".", visit)
	if err != nil {
		fmt.Println("遍历目录失败:", err)
		return
	}
}

以上代码将只输出当前目录下扩展名为".txt"的文件。

相关推荐