我是go
和go-swagger
的新手。我正在goswager.io.中遵循简单服务器教程中的步骤
我使用的是Ubuntu 18.04
、swagger v0.25.0
和go 1.15.6
。
- 按照相同的步骤,生成的文件有一些不同。例如,goswagger.io的
models
中有find_todos_okbody.go
和get_okbody.go
,但我的没有。为什么会这样
链接到我生成的文件与链接到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)
- goswager.io todo列表中的第一步是
swagger init spec ...
。我应该在哪个目录下运行此命令?我在主目录中一个新创建的文件夹中运行了它。但是,在页面中,它显示了要成为~/go/src/github.com/go-swagger/go-swagger/examples/tutorials/todo-list
的路径。我不确定是应该使用go get ...
、git clone ...
还是创建这些文件夹。有人能给我建议吗
谢谢。
-
这可能是文档落后于您正在运行的代码版本。只要它进行编译,工具生成的特定文件就不那么重要了。
-
这是一个编译错误。当您执行
go install foo
时,它将尝试将foo包构建为可执行文件,然后将其移动到GOPATH/bin
目录中。restapi/configure_todo_list.go
中生成的代码似乎不适合生成的operations
代码。 -
您只需要一个空目录和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/
,它将成功。