我尝试在代码中使用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
// ...
}