您好,我正在与Golang交流,想尝试GraphQL而不是RESTful方法。因此,我决定使用https://github.com/99designs/gqlgen来实现它。
我遵循了入门指南,直到一切顺利,直到我粘贴了resolver.go代码。
我的文件夹结构:
├── go.mod
├── go.sum
├── gqlgen.yml
├── graph
│ ├── generated
│ │ └── generated.go
│ ├── model
│ │ └── models_gen.go
│ ├── resolver.go
│ ├── schema.graphqls
│ └── schema.resolvers.go
└── server.go
我的resolver.go
package graph
import (
"context"
"fmt"
"math/rand"
)
type Resolver struct {
todos []*model.Todo
}
func (r *mutationResolver) CreateTodo(ctx context.Context, input model.NewTodo) (*model.Todo, error) {
todo := &model.Todo{
Text: input.Text,
ID: fmt.Sprintf("T%d", rand.Int()),
User: &model.User{ID: input.UserID, Name: "user " + input.UserID},
}
r.todos = append(r.todos, todo)
return todo, nil
}
func (r *queryResolver) Todos(ctx context.Context) ([]*model.Todo, error) {
return r.todos, nil
}
显然,由于我没有导入模型,因此会引发错误。
所以我试图像这样导入它,"[MODULENAME]/graph/model"
结果是:
graph/schema.resolvers.go:14:28: (*mutationResolver).CreateTodo redeclared in this block
previous declaration at graph/resolver.go:18:6
graph/schema.resolvers.go:18:25: (*queryResolver).Todos redeclared in this block
previous declaration at graph/resolver.go:28:6
如果我尝试 [MODULENAME]/model
它抛出了这个错误:
cannot find module providing package [MODULENAME]/model: unrecognized import path "[MODULENAME]/model": https fetch: Get "[MODULENAME]/model?go-get=1": dial tcp [MYSERVER IP]: connect: connection refused
我是Golang和通用模块中的新手。我试图解决,但莫名其妙地感到困惑。我将非常感谢您的帮助。
亲切的问候
您的问题是您多次声明了(*mutationResolver).CreateTodo
and (*queryResolver).Todos
函数。首先在graph/resolver.go
文件中定义它们,然后第二次在graph/schema.resolvers.go
gqlgen生成的文件中定义它们。
该graph/schema.resolvers.go
文件每次都会重新生成,并且包含所有无法从“状态”(即您的Resolver
结构)或model
文件夹中匹配的解析器实现。
解决方案:
graph/schema.resolvers.go
文件中删除这些声明gqlgen generate
再次运行该命令,因为它将找到您的实现并将这些行从新生成的文件中删除关于模块和导入路径的注释:
您的第一个导入路径很棒,如果您的go.mod
文件位于根目录中,则可以使用该yourmodulename/path/to/folder
格式导入其中的所有软件包。在这种情况下,yourmodulename/graph/model
就是您的导入路径。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句