#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
.
- Следуя тем же шагам, генерируемые файлы имеют несколько отличий. Например, goswagger.io у
find_todos_okbody.go
get_okbody.go
models
него есть и есть, а у меня нет. Почему это так?
Ссылка на скриншот моих сгенерированных файлов против Ссылка на скриншот сгенерированных файлов с помощью swagger.io
- Запуск сервера, как написано в руководстве
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)
- Первый шаг в goswagger.io список дел есть
swagger init spec ...
. В каком каталоге я должен выполнить эту команду? Я запустил его во вновь созданной папке в моем домашнем каталоге. Однако на странице показан путь, который должен быть~/go/src/github.com/go-swagger/go-swagger/examples/tutorials/todo-list
. Я не уверен, следует ли мне использоватьgo get ...
git clone ...
или создавать эти папки. Может кто-нибудь посоветовать мне?
Спасибо.
Ответ №1:
- Скорее всего, документация отстает от версии кода, который вы запускаете. Пока он компилируется, конкретные файлы, которые генерирует инструмент, не так важны.
- Это ошибка компиляции. Когда вы это сделаете
go install foo
, он попытается собрать пакет foo как исполняемый файл, а затем переместить его в вашGOPATH/bin
каталог. Кажется, что сгенерированный кодrestapi/configure_todo_list.go
неверен дляoperations
сгенерированного кода. - Все, что вам нужно для самостоятельного запуска этого руководства, — это пустой каталог и инструмент 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/
, она будет успешной.