go swagger restapi/configure_todo_list.api.TodoGetHandler未定义



我是gogo-swagger的新手。我正在goswager.io.中遵循简单服务器教程中的步骤

我使用的是Ubuntu 18.04swagger v0.25.0go 1.15.6

  1. 按照相同的步骤,生成的文件有一些不同。例如,goswagger.io的models中有find_todos_okbody.goget_okbody.go,但我的没有。为什么会这样

链接到我生成的文件与链接到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. goswager.io todo列表中的第一步是swagger init spec ...。我应该在哪个目录下运行此命令?我在主目录中一个新创建的文件夹中运行了它。但是,在页面中,它显示了要成为~/go/src/github.com/go-swagger/go-swagger/examples/tutorials/todo-list的路径。我不确定是应该使用go get ...git clone ...还是创建这些文件夹。有人能给我建议吗

谢谢。

  1. 这可能是文档落后于您正在运行的代码版本。只要它进行编译,工具生成的特定文件就不那么重要了。

  2. 这是一个编译错误。当您执行go install foo时,它将尝试将foo包构建为可执行文件,然后将其移动到GOPATH/bin目录中。restapi/configure_todo_list.go中生成的代码似乎不适合生成的operations代码。

  3. 您只需要一个空目录和swagger工具(而不是其源代码(就可以自己运行本教程。您可以从这个空项目的根目录运行命令。为了不遇到GOPATH问题,我会在做任何其他事情之前用go mod init todo-list-example初始化一个模块。注意,虽然todo列表示例代码存在于go swagger源代码中,但它只是用于记录示例使用和输出。

我对#2的建议是确保您使用的是正确发布的go swagger版本,而不是从最新的提交中安装(当您只执行go get时会发生这种情况(,因为我发现这偶尔会不稳定。

接下来,重新生成整个服务器,但请确保通过将--regenerate-configureapi传递给swagger generate调用来重新生成restapi/configure_todo_list.go。这个文件并不总是刷新的,因为你要修改它来配置你的应用程序,如果你更改了工具的版本,它可能会不同并且不兼容。

如果在那之后你仍然收到编译错误,那么可能值得在https://github.com/go-swagger/go-swagger/issues.

谢谢@EzequielMuns。如中所述,在我运行go get - u -f ./...后,#2中的错误消失了

...
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 ./...

我认为这是swagger代码生成的错误。你可以做如下修复这个:

  • 删除文件configure_todo_list.go
  • 重新生成代码
# swagger generate server -A todo-list -f ./swagger.yml

然后,您可以运行命令go install ./cmd/todo-list-server/,它将成功。

相关内容

  • 没有找到相关文章

最新更新