Golang path / filepath.Rel()显示奇怪的错误消息

时间:2019-05-17 01:14:22

标签: go filepath

我尝试在代码中使用path/filepath.Rel()获得相对路径。

/
├── lib
│   ├── schema.go
│   ├── schema_test.go
│   └── ...
├── main.go
├── schema
│   ├── Mutation
│   │   └── User
│   │       └── user.graphql
│   ├── Query
│   │   └── User
│   │       └── user.graphql
│   └── shared
│       └── shared.graphql
└ ...

项目结构与上面类似。我制作了一个使用args运行的CLI工具,其中一个args是目录路径。如您所见,我将所有lib go文件放入/ lib。因此,当我在/lib/schema.go中调用func GetSchema(path string)来解析/ schema目录中的所有文件时,它将以项目根路径作为参数(os.Args),而不是针对/ lib的相对路径。 。这就是为什么我需要在/ lib中获得功能GetSchema(path string)的相对路径。

例如

$ gqlmerge ./schema schema.graphql
/pb/schema.go中的

GetSchema()需要../schema作为arg而不是./schema来解析/ schema目录中的所有文件。

实际上,filepath.Rel()返回正确的相对路径../schema,但最棘手的是它会吐出类似这样的错误。

ERRO[2019-05-17T01:56:38+09:00] /Users/arnold/Documents/git/gqlmerge/lib/schema.go: &{[rel err] 189 := [0xc000261440]}: unable to find value from variable
&{[rel err] 189 := [0xc000261440]}: unable to find value from variable
&{[rel err] 189 := [0xc000261440]}: unable to find value from variable
&{[rel err] 189 := [0xc000261440]}: unable to find value from variable
&{[rel err] 189 := [0xc000261440]}: unable to find value from variable

另一个奇怪的事情是,我可以从../schema获得正确的相对路径filepath.Rel(),除了该错误之外,其他一切都正常。

我确实尝试在单独的_test.go中对其进行测试,但是测试结果始终是干净的。我不知道为什么此Rel()会吐出该错误。

我们将不胜感激任何帮助和线索。

我尝试过filepath.Rel("lib", "./schema"),它可以正常工作并返回正确的相对路径../schema

// /lib/schema.go

// GetSchema is to parse ../schema/**/*.graphql
func GetSchema(path string) string {
    rel, err := filepath.Rel("lib", path)
    if err != nil {
        panic(err)
    }

    box := packr.New("schema", rel)
    var schema strings.Builder
// ...
}

0 个答案:

没有答案