在 Go 中实现 *nix find 实用程序

问题描述 投票:0回答:1

我正在尝试构建一个 linux 实用程序,我想解析以下命令。

go-find / -name "filename"

上面应该在给定路径(/)中搜索给定的“文件名”。

但是代码无法解析标志,因为它在要解析的任何标志值之前遇到非标志参数。帮助理解它。这是写的标志包文档。

“标志解析在第一个非标志参数(“-”是非标志参数)之前或终止符“--”之后停止。”

我在想还有其他解决方法吗?

go flags
1个回答
0
投票

使用 flag.FlagSet 解析没有“路径”变量的标志,使用 os.Args 手动解析“路径”变量:

type Flags struct {
    Path string
    Name string
}

func main() {
    args := os.Args
    if len(args) < 4 { // the program name is the first argument
        log.Fatal("not enough arguments")
    }

    var (
        fs = flag.NewFlagSet(args[0], flag.ExitOnError)
        f  Flags
    )
    fs.StringVar(&f.Name, "name", "", "file name")
    err := fs.Parse(args[2:]) // parse flags without the program name and the 'path' argument
    if err != nil {
        log.Fatal(err)
    }

    f.Path = args[1] // get 'path' argument

    fmt.Println(f)
    
    // search algorithm ...
}
{/ filename}
© www.soinside.com 2019 - 2024. All rights reserved.