本文将展示如何列出目录内容。

列出目录

Golang 版本

1.12.1

前言

本文将展示如何列出目录内容。

实现

package main

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

func main() {

	fmt.Println("List by ReadDir")
	listDirByReadDir(".")
	fmt.Println()
	fmt.Println("List by Walk")
	listDirByWalk(".")
}

func listDirByWalk(path string) {
	filepath.Walk(path, func(wPath string, info os.FileInfo,
		err error) error {

		if wPath == path {
			return nil
		}

		if info.IsDir() {
			fmt.Printf("[%s]\n", wPath)
			return filepath.SkipDir
		}

		if wPath != path {
			fmt.Println(wPath)
		}
		return nil
	})
}

func listDirByReadDir(path string) {
	lst, err := ioutil.ReadDir(path)
	if err != nil {
		panic(err)
	}
	for _, val := range lst {
		if val.IsDir() {
			fmt.Printf("[%s]\n", val.Name())
		} else {
			fmt.Println(val.Name())
		}
	}
}
$ go run main.go
List by ReadDir
[folder]
main.go

List by Walk
[folder]
main.go

原理

listDirByReadDirioutilReadDirFileInfoReadDirReadDirosFileReaddir
listDirByWalkfilepath.WalkWalkWalkFuncfilepath.SkipDirWalk