ls 命令

lsls
lslsls -a.

此命令还有很多功能,这一节的重点是命令行程度的编写,就实现上面四个。

os.Args 读取参数

定义如下,一个数组。该数组长度由参数个数决定,第一个参数为程序本身,后面为参数列表。

var Args []string
ls -lArgs=["ls","-l"]ls
func main() {
	targetDirPath := "./"
	if len(os.Args) > 1 {
		targetDirPath = os.Args[1]
	}

	if dirList, err := ioutil.ReadDir(targetDirPath); err == nil {
		for _, dirInfo := range dirList {
			fmt.Print(dirInfo.Name() + " ")
		}
	} else {
		fmt.Println(err.Error())
	}
}
os.Agrsioutil.ReadDir[] FileInfoerror

输出

$ go build -o ls main.go
$ ./ls 
main.go folder ls
$ ./ls folder
file1 file2

-os.Args

pflag

Goflagpflagflagpflagflag
flaguintuint64pflaguint8uint16int32ipip maskip netcountsliceflagFlagFlagSetpflagflagshorthanddeprecatedhidden
var a = pflag.BoolP("all", "a", false, "Include directory entries whose names begin with a dot (.).")
	var help = pflag.BoolP("help", "h", false, "Show this help message.")
	pflag.Parse()
	if *help {
		pflag.Usage()
		return
	}
	args := pflag.Args()
	if len(args) == 0 {
		args = append(args, "./")
	}
	if len(args) == 1 {
		ShowPath(args[0], *a)
	} else {
		for _, v := range args {
			fmt.Println(v + ":")
			ShowPath(v, *a)
		}
	}
ShowPathboolpflag.BoolPbool--all-apflag.Parse()pflag.Usage()
ls
$ go build -o ls main.go
$ ./ls
folder go.mod go.sum main.go 
$ ./ls -a
. .. .git folder go.mod go.sum main.go 
$ ./ls ./ folder 
./:
folder go.mod go.sum main.go 
folder:
file1 file2
$ ./ls -h
Usage of ./ls:
  -a, --all    Include directory entries whose names begin with a dot (.).
  -h, --help   Show this help message.

是不是相当给力啦!

小结

命令行读取一共有五个常用的包

os.ArgsflagGopflagcobraviper
bin
您可能感兴趣的文章: