0

我是go和的新手go-swagger。我正在按照goswagger.io中的简单服务器教程中的步骤进行操作。

我正在使用Ubuntu 18.04,swagger v0.25.0go 1.15.6.

  1. 按照相同的步骤,生成的文件有一些差异。例如,goswagger.io 有find_todos_okbody.goget_okbody.goin,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 todo-list的第一步是swagger init spec .... 我应该在哪个目录中运行此命令?我在我的主目录中新创建的文件夹中运行它。但是,从页面上看,它显示的路径是~/go/src/github.com/go-swagger/go-swagger/examples/tutorials/todo-list. 我不确定是否应该使用go get ...git clone ...创建这些文件夹。有人可以给我建议吗?

谢谢。

4

2 回答 2

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

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

  3. 自己运行本教程所需的只是一个空目录和 swagger 工具(不是它的源代码)。您从这个空项目的根目录运行命令。为了不遇到 GOPATH 问题,我会go mod init todo-list-example在做任何其他事情之前初始化一个模块。请注意,虽然 todo-list 示例代码存在于 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提交错误报告。

于 2021-01-06T15:32:13.430 回答
0

谢谢@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 ./...
于 2021-01-07T03:13:31.853 回答