go-swagger restapi/configure_todo_list.go — api.Неопределенная ошибка TodoGetHandler

#go #swagger #swagger-2.0 #go-swagger

#Вперед #swagger #swagger-2.0 #go-swagger

Вопрос:

Я новичок в go и go-swagger . Я выполняю шаги в простом руководстве по серверу в goswagger.io .

Я использую Ubuntu 18.04 , swagger v0.25.0 и go 1.15.6 .

  1. Следуя тем же шагам, генерируемые файлы имеют несколько отличий. Например, goswagger.io у find_todos_okbody.go get_okbody.go models него есть и есть, а у меня нет. Почему это так?

Ссылка на скриншот моих сгенерированных файлов против Ссылка на скриншот сгенерированных файлов с помощью swagger.io

  1. Запуск сервера, как написано в руководстве go install ./cmd/todo-list-server/ , выдает следующую ошибку. Может кто-нибудь, пожалуйста, помочь с этим?
 # my_folder/swagger-todo-list/restapi
restapi/configure_todo_list.go:41:8: api.TodosGetHandler undefined (type *operations.TodoListAPI has no field or method TodosGetHandler)
restapi/configure_todo_list.go:42:6: api.TodosGetHandler undefined (type *operations.TodoListAPI has no field or method TodosGetHandler)
 
  1. Первый шаг в goswagger.io список дел есть swagger init spec ... . В каком каталоге я должен выполнить эту команду? Я запустил его во вновь созданной папке в моем домашнем каталоге. Однако на странице показан путь, который должен быть ~/go/src/github.com/go-swagger/go-swagger/examples/tutorials/todo-list . Я не уверен, следует ли мне использовать go get ... git clone ... или создавать эти папки. Может кто-нибудь посоветовать мне?

Спасибо.

Ответ №1:

  1. Скорее всего, документация отстает от версии кода, который вы запускаете. Пока он компилируется, конкретные файлы, которые генерирует инструмент, не так важны.
  2. Это ошибка компиляции. Когда вы это сделаете go install foo , он попытается собрать пакет foo как исполняемый файл, а затем переместить его в ваш GOPATH/bin каталог. Кажется, что сгенерированный код restapi/configure_todo_list.go неверен для operations сгенерированного кода.
  3. Все, что вам нужно для самостоятельного запуска этого руководства, — это пустой каталог и инструмент swagger (не его исходный код). Вы запускаете команды из корня этого пустого проекта. Чтобы не столкнуться с проблемами GOPATH, я бы инициализировал модуль, go mod init todo-list-example прежде чем делать что-либо еще. Обратите внимание, что, хотя код примера списка задач существует внутри исходного кода go-swagger, он существует только для документирования использования и вывода примера.

Что я бы посоветовал для # 2, так это убедиться, что вы используете правильно выпущенную версию go-swagger, а не устанавливаете с последней фиксации (что происходит, когда вы просто выполняете a go get ), поскольку я обнаружил, что это иногда нестабильно.

Затем заново сгенерируйте весь сервер, но убедитесь, что вы также восстановили restapi/configure_todo_list.go его, перейдя --regenerate-configureapi к вашему swagger generate вызову. Этот файл не всегда обновляется, потому что вы должны изменить его для настройки своего приложения, и если вы изменили версии инструмента, они могут отличаться и быть несовместимыми.

Если после этого вы все еще получаете ошибку компиляции, возможно, стоит отправить отчет об ошибке по адресу https://github.com/go-swagger/go-swagger/issues .

Комментарии:

1. Для # 3, чтобы уточнить, любой пустой каталог (не обязательно внутри $GOPATH ) будет работать правильно?

2. Если вы находитесь за пределами gopath, лучше всего инициализировать модуль с go mod init помощью, прежде чем делать что-либо еще. Если внутри gopath это должно просто работать.

Ответ №2:

Спасибо @EzequielMuns. Ошибки в # 2 исчезли после того, как я запустил go get - u -f ./... , как указано в

 ...
For this generation to compile you need to have some packages in your GOPATH:

        * github.com/go-openapi/runtime
        * github.com/jessevdk/go-flags

You can get these now with: go get -u -f ./...
 

Ответ №3:

Я думаю, что это ошибка генерации кода swagger. Вы можете сделать следующее, чтобы исправить это:

  • удалить файл configure_todo_list.go ;
  • восстановить код.
 # swagger generate server -A todo-list -f ./swagger.yml
 

Затем вы можете запустить command go install ./cmd/todo-list-server/ , она будет успешной.