Golang Ошибка gqlgen при попытке импортировать модель в распознаватель. go - PullRequest
0 голосов
/ 13 марта 2020

Здравствуйте, я играл с Golang и хотел попробовать GraphQL вместо RESTful-подхода. Поэтому я решил использовать https://github.com/99designs/gqlgen для его реализации.

Я следовал руководству по началу работы и все шло хорошо, пока я не вставил преобразователь. go code.

Структура моей папки:

├── go.mod
├── go.sum
├── gqlgen.yml               
├── graph
│   ├── generated            
│   │   └── generated.go
│   ├── model                
│   │   └── models_gen.go
│   ├── resolver.go          
│   ├── schema.graphqls      
│   └── schema.resolvers.go  
└── server.go                

Мой распознаватель. 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 и в модулях в общем. Я пытался решить, но почему-то я очень запутался. Я действительно ценю любую помощь.

С уважением

1 Ответ

0 голосов
/ 13 марта 2020

Ваша проблема в том, что вы объявили функции (*mutationResolver).CreateTodo и (*queryResolver).Todos несколько раз. Сначала вы определили их в файле graph/resolver.go, а во второй раз в файле graph/schema.resolvers.go, который сгенерирован gqlgen.

Файл graph/schema.resolvers.go будет регенерироваться каждый раз и будет содержать все реализации распознавателя. которые не могут быть сопоставлены с вашим «состоянием», которым является ваша структура Resolver, или с папкой model.

Решения :

  • Вы можете легко удалить эти объявления из файла graph/schema.resolvers.go
  • Или просто снова запустить команду gqlgen generate, поскольку она найдет ваши реализации и удалит эти строки из вновь созданного файла

Замечание о модулях и путях импорта :

Ваш первый путь импорта был отличным, если у вас есть файл go.mod в root, вы можете импортировать все пакеты внутри них, используя формат yourmodulename/path/to/folder. В этом случае yourmodulename/graph/model - это путь импорта.

...