Go 使用通配符*引用目录中的文件

Go 使用通配符*引用目录中的文件,go,Go,我正在尝试使用这个Go lang论坛软件。它需要顶级论坛目录中的配置文件来指定有关论坛的某些信息(名称、url等)。例如,软件设计师使用的文件是forums/sumatrapdf\u config.json 在main.go中有一个函数可以读取论坛配置文件 func readForumConfigs(configDir string) error { pat := filepath.Join(configDir, "*_config.json") fmt.Println(

我正在尝试使用这个Go lang论坛软件。它需要顶级论坛目录中的配置文件来指定有关论坛的某些信息(名称、url等)。例如,软件设计师使用的文件是
forums/sumatrapdf\u config.json

在main.go中有一个函数可以读取论坛配置文件

    func readForumConfigs(configDir string) error {
    pat := filepath.Join(configDir, "*_config.json")
    fmt.Println("path", pat)
    files, err := filepath.Glob(pat)
    fmt.Println("files", files, err)
    if err != nil {
        return err
    }
    if files == nil {
        return errors.New("No forums configured!")
    }
    for _, configFile := range files {
        var forum ForumConfig
        b, err := ioutil.ReadFile(configFile)
        if err != nil {
            return err
        }
        err = json.Unmarshal(b, &forum)
        if err != nil {
            return err
        }
        if !forum.Disabled {
            forums = append(forums, &forum)
        }
    }
    if len(forums) == 0 {
        return errors.New("All forums are disabled!")
    }
    return nil
}
funnyforum_config.json _config.json
我已经使用了Join的第二个参数,专门用文件名和通配符*来调用它,但是我一直收到错误消息,告诉我没有文件

the log statements show the path that it's checking as well as the fact that no files are found
path forums/*funnyforum_config.json files [] 2014/07/25 10:34:11 Failed to read forum configs, err: No forums configured!
如果我试图用通配符
*
描述配置,就像软件创建者在源代码中所做的那样,也会发生同样的事情

func readForumConfigs(configDir string) error { pat := filepath.Join(configDir, "*_config.json") fmt.Println("path", pat) files, err := filepath.Glob(pat) fmt.Println("files", files)

path forums/*_config.json files [] 2014/07/25 10:40:38 Failed to read forum configs, err: No forums configured!
在论坛目录中,我放置了各种配置文件

    func readForumConfigs(configDir string) error {
    pat := filepath.Join(configDir, "*_config.json")
    fmt.Println("path", pat)
    files, err := filepath.Glob(pat)
    fmt.Println("files", files, err)
    if err != nil {
        return err
    }
    if files == nil {
        return errors.New("No forums configured!")
    }
    for _, configFile := range files {
        var forum ForumConfig
        b, err := ioutil.ReadFile(configFile)
        if err != nil {
            return err
        }
        err = json.Unmarshal(b, &forum)
        if err != nil {
            return err
        }
        if !forum.Disabled {
            forums = append(forums, &forum)
        }
    }
    if len(forums) == 0 {
        return errors.New("All forums are disabled!")
    }
    return nil
}
funnyforum_config.json _config.json
以及它附带的配置

sumatrapdf_config.json

您没有检查来自
glob
的错误,您应该,也可以用不同的方式实现它:

func FilterDirs(dir, suffix string) ([]string, error) {
    files, err := ioutil.ReadDir(dir)
    if err != nil {
        return nil, err
    }
    res := []string{}
    for _, f := range files {
        if !f.IsDir() && strings.HasSuffix(f.Name(), suffix) {
            res = append(res, filepath.Join(dir, f.Name()))
        }
    }
    return res, nil
}

func FilterDirsGlob(dir, suffix string) ([]string, error) {
    return filepath.Glob(filepath.Join(dir, suffix))
}

func main() {
    fmt.Println(FilterDirs("/tmp", ".json"))
    fmt.Println(FilterDirsGlob("/tmp", "*.json"))
}

//编辑


根据我们的讨论,您必须使用完整路径
/home/user/go/../forums/
或相对路径
/forums/
如果您没有从
glob
检查错误,您应该,也可以用不同的方式实现它:

func FilterDirs(dir, suffix string) ([]string, error) {
    files, err := ioutil.ReadDir(dir)
    if err != nil {
        return nil, err
    }
    res := []string{}
    for _, f := range files {
        if !f.IsDir() && strings.HasSuffix(f.Name(), suffix) {
            res = append(res, filepath.Join(dir, f.Name()))
        }
    }
    return res, nil
}

func FilterDirsGlob(dir, suffix string) ([]string, error) {
    return filepath.Glob(filepath.Join(dir, suffix))
}

func main() {
    fmt.Println(FilterDirs("/tmp", ".json"))
    fmt.Println(FilterDirsGlob("/tmp", "*.json"))
}

//编辑


根据我们的讨论,您必须使用完整路径
/home/user/go/../forums/
或相对路径
/forums/
如果您没有从
glob
检查错误,您应该,也可以用不同的方式实现它:

func FilterDirs(dir, suffix string) ([]string, error) {
    files, err := ioutil.ReadDir(dir)
    if err != nil {
        return nil, err
    }
    res := []string{}
    for _, f := range files {
        if !f.IsDir() && strings.HasSuffix(f.Name(), suffix) {
            res = append(res, filepath.Join(dir, f.Name()))
        }
    }
    return res, nil
}

func FilterDirsGlob(dir, suffix string) ([]string, error) {
    return filepath.Glob(filepath.Join(dir, suffix))
}

func main() {
    fmt.Println(FilterDirs("/tmp", ".json"))
    fmt.Println(FilterDirsGlob("/tmp", "*.json"))
}

//编辑


根据我们的讨论,您必须使用完整路径
/home/user/go/../forums/
或相对路径
/forums/
如果您没有从
glob
检查错误,您应该,也可以用不同的方式实现它:

func FilterDirs(dir, suffix string) ([]string, error) {
    files, err := ioutil.ReadDir(dir)
    if err != nil {
        return nil, err
    }
    res := []string{}
    for _, f := range files {
        if !f.IsDir() && strings.HasSuffix(f.Name(), suffix) {
            res = append(res, filepath.Join(dir, f.Name()))
        }
    }
    return res, nil
}

func FilterDirsGlob(dir, suffix string) ([]string, error) {
    return filepath.Glob(filepath.Join(dir, suffix))
}

func main() {
    fmt.Println(FilterDirs("/tmp", ".json"))
    fmt.Println(FilterDirsGlob("/tmp", "*.json"))
}

//编辑



从我们的讨论中,您必须使用完整路径
/home/user/go/../forums/
或相对路径
/forums/

是否检查了从
Glob
返回的错误?@OneOfOne
fmt.Println(“文件”,文件,错误)
显示
nil
是否将完整路径传递到目录?试试看。出于好奇,你用的是什么版本的围棋?@我用的是围棋1.3。关于传递完整路径,您能告诉我应该使用哪些代码来替换函数的第一行吗。因为我将通过完整路径,我显然不会使用Join,但如何使用?pat:=filepath.Join(configDir,*\u config.json)如果将
configDir
forums/
更改为
/complete/path/to/forums
,会发生什么情况。是否检查了
Glob
返回的错误?@OneOfOne
fmt.Println(“文件”,文件,错误)
显示错误的
nil
是否传递目录的完整路径?试试看。出于好奇,你用的是什么版本的围棋?@我用的是围棋1.3。关于传递完整路径,您能告诉我应该使用哪些代码来替换函数的第一行吗。因为我将通过完整路径,我显然不会使用Join,但如何使用?pat:=filepath.Join(configDir,*\u config.json)如果将
configDir
forums/
更改为
/complete/path/to/forums
,会发生什么情况。是否检查了
Glob
返回的错误?@OneOfOne
fmt.Println(“文件”,文件,错误)
显示错误的
nil
是否传递目录的完整路径?试试看。出于好奇,你用的是什么版本的围棋?@我用的是围棋1.3。关于传递完整路径,您能告诉我应该使用哪些代码来替换函数的第一行吗。因为我将通过完整路径,我显然不会使用Join,但如何使用?pat:=filepath.Join(configDir,*\u config.json)如果将
configDir
forums/
更改为
/complete/path/to/forums
,会发生什么情况。是否检查了
Glob
返回的错误?@OneOfOne
fmt.Println(“文件”,文件,错误)
显示错误的
nil
是否传递目录的完整路径?试试看。出于好奇,你用的是什么版本的围棋?@我用的是围棋1.3。关于传递完整路径,您能告诉我应该使用哪些代码来替换函数的第一行吗。因为我将通过完整路径,我显然不会使用Join,但如何使用?pat:=filepath.Join(configDir,*\u config.json)如果将
configDir
forums/
更改为
/complete/path/to/forums
,会发生什么情况。我用整个函数更新了OP。正在检查Glob错误,它是nilI,用整个函数更新OP。正在检查Glob错误,它是nilI,用整个函数更新OP。正在检查Glob错误,它是nilI,用整个函数更新OP。正在检查全局错误,它为零