go-swagger 自动生成的代码中出现错误 "import cycle not allowed"
Error "import cycle not allowed" in go-swagger auto generated code
我在 go-swagger 自动生成的文件中遇到错误 "import cycle not allowed",下面是代码。我还阅读了与此问题相关的其他答案,但没有成功。如果需要任何其他信息,请发表评论。
提前致谢
items_swagger.yaml
---
swagger: "2.0"
info:
description: Item list swagger for performing various op like create , delete , update.
title: ItemList
version: 1.0.0
consumes:
- application/json
produces:
- application/json
schemes:
- http
paths:
/createItem:
post:
tags:
- createItem
operationId: createOne
parameters:
- name: body
in: body
schema:
$ref: '#/definitions/item'
responses:
200:
description: Created
schema:
$ref: '#/definitions/item'
default:
description:
error
schema:
$ref: "#/definitions/error"
/updateItem:
put:
tags:
- updateItem
operationId: updateone
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/item"
responses:
200:
description: OK
schema:
$ref: "#/definitions/item"
default:
description: error
schema:
$ref: "#/definitions/error"
/deleteItems:
delete:
tags:
- deleteItem
operationId: purgeItems
responses:
204:
description: Deleted
default:
description: error
schema:
$ref: "#/definitions/error"
definitions:
item:
type: object
required:
- id
- itemName
properties:
id:
type: integer
format: int64
readOnly: false
itemName:
type: string
format: string
readOnly: false
error:
type: object
required:
- message
- code
properties:
code:
type: integer
format: int
message:
type: string
当我生成它的模型时,它生成成功。
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$ swagger generate server -A ItemsSwagger -f ../swagger/items-swagger.yml -t generate
2020/04/14 20:25:19 validating spec /home/beast/Documents/WorkSpace_Go/ItemsSwagger/swagger/items-swagger.yml
2020/04/14 20:25:21 preprocessing spec with option: minimal flattening
2020/04/14 20:25:21 building a plan for generation
2020/04/14 20:25:21 generation target generate
2020/04/14 20:25:21 planning definitions
2020/04/14 20:25:21 planning operations
2020/04/14 20:25:21 grouping operations into packages
2020/04/14 20:25:21 planning meta data and facades
2020/04/14 20:25:21 rendering 2 models
2020/04/14 20:25:21 rendering 1 templates for model error
2020/04/14 20:25:21 name field error
2020/04/14 20:25:21 package field models
2020/04/14 20:25:21 creating generated file "error.go" in "generate/models" as definition
2020/04/14 20:25:21 executed template asset:model
2020/04/14 20:25:21 rendering 1 templates for model item
2020/04/14 20:25:21 name field item
2020/04/14 20:25:21 package field models
2020/04/14 20:25:21 creating generated file "item.go" in "generate/models" as definition
2020/04/14 20:25:21 executed template asset:model
2020/04/14 20:25:21 rendering 3 operation groups (tags)
2020/04/14 20:25:21 rendering 1 operations for create_item
2020/04/14 20:25:21 rendering 4 templates for operation ItemsSwagger
2020/04/14 20:25:21 name field createOne
2020/04/14 20:25:21 package field create_item
2020/04/14 20:25:21 creating generated file "create_one_parameters.go" in "generate/restapi/operations/create_item" as parameters
2020/04/14 20:25:21 executed template asset:serverParameter
2020/04/14 20:25:21 name field createOne
2020/04/14 20:25:21 package field create_item
2020/04/14 20:25:21 creating generated file "create_one_urlbuilder.go" in "generate/restapi/operations/create_item" as urlbuilder
2020/04/14 20:25:21 executed template asset:serverUrlbuilder
2020/04/14 20:25:21 name field createOne
2020/04/14 20:25:21 package field create_item
2020/04/14 20:25:21 creating generated file "create_one_responses.go" in "generate/restapi/operations/create_item" as responses
2020/04/14 20:25:21 executed template asset:serverResponses
2020/04/14 20:25:21 name field createOne
2020/04/14 20:25:21 package field create_item
2020/04/14 20:25:21 creating generated file "create_one.go" in "generate/restapi/operations/create_item" as handler
2020/04/14 20:25:21 executed template asset:serverOperation
2020/04/14 20:25:21 rendering 0 templates for operation group ItemsSwagger
2020/04/14 20:25:21 rendering 1 operations for delete_item
2020/04/14 20:25:21 rendering 4 templates for operation ItemsSwagger
2020/04/14 20:25:21 name field purgeItems
2020/04/14 20:25:21 package field delete_item
2020/04/14 20:25:21 creating generated file "purge_items_parameters.go" in "generate/restapi/operations/delete_item" as parameters
2020/04/14 20:25:21 executed template asset:serverParameter
2020/04/14 20:25:21 name field purgeItems
2020/04/14 20:25:21 package field delete_item
2020/04/14 20:25:21 creating generated file "purge_items_urlbuilder.go" in "generate/restapi/operations/delete_item" as urlbuilder
2020/04/14 20:25:21 executed template asset:serverUrlbuilder
2020/04/14 20:25:21 name field purgeItems
2020/04/14 20:25:21 package field delete_item
2020/04/14 20:25:21 creating generated file "purge_items_responses.go" in "generate/restapi/operations/delete_item" as responses
2020/04/14 20:25:21 executed template asset:serverResponses
2020/04/14 20:25:21 name field purgeItems
2020/04/14 20:25:21 package field delete_item
2020/04/14 20:25:21 creating generated file "purge_items.go" in "generate/restapi/operations/delete_item" as handler
2020/04/14 20:25:21 executed template asset:serverOperation
2020/04/14 20:25:21 rendering 0 templates for operation group ItemsSwagger
2020/04/14 20:25:21 rendering 1 operations for update_item
2020/04/14 20:25:21 rendering 4 templates for operation ItemsSwagger
2020/04/14 20:25:21 name field updateone
2020/04/14 20:25:21 package field update_item
2020/04/14 20:25:21 creating generated file "updateone_parameters.go" in "generate/restapi/operations/update_item" as parameters
2020/04/14 20:25:21 executed template asset:serverParameter
2020/04/14 20:25:21 name field updateone
2020/04/14 20:25:21 package field update_item
2020/04/14 20:25:21 creating generated file "updateone_urlbuilder.go" in "generate/restapi/operations/update_item" as urlbuilder
2020/04/14 20:25:21 executed template asset:serverUrlbuilder
2020/04/14 20:25:21 name field updateone
2020/04/14 20:25:21 package field update_item
2020/04/14 20:25:21 creating generated file "updateone_responses.go" in "generate/restapi/operations/update_item" as responses
2020/04/14 20:25:21 executed template asset:serverResponses
2020/04/14 20:25:21 name field updateone
2020/04/14 20:25:21 package field update_item
2020/04/14 20:25:21 creating generated file "updateone.go" in "generate/restapi/operations/update_item" as handler
2020/04/14 20:25:21 executed template asset:serverOperation
2020/04/14 20:25:21 rendering 0 templates for operation group ItemsSwagger
2020/04/14 20:25:21 rendering support
2020/04/14 20:25:21 rendering 6 templates for application ItemsSwagger
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "main.go" in "generate/cmd/items-swagger-server" as main
2020/04/14 20:25:21 executed template asset:serverMain
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "embedded_spec.go" in "generate/restapi" as embedded_spec
2020/04/14 20:25:21 executed template asset:swaggerJsonEmbed
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "server.go" in "generate/restapi" as server
2020/04/14 20:25:21 executed template asset:serverServer
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "items_swagger_api.go" in "generate/restapi/operations" as builder
2020/04/14 20:25:21 executed template asset:serverBuilder
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "doc.go" in "generate/restapi" as doc
2020/04/14 20:25:21 executed template asset:serverDoc
2020/04/14 20:25:21 Generation completed!
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 generate/...
Error is occurring here , when I am trying to start the server.
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$ go run generate/cmd/items-swagger-server/main.go
import cycle not allowed
package main
imports generate/restapi
imports context
imports errors
imports internal/reflectlite
imports runtime
imports internal/cpu
imports runtime
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$
去环境输出
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$ go env
GOARCH="amd64"
GOBIN="/home/beast/Documents/WorkSpace_Go/ItemsSwagger/bin"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/beast/Documents/WorkSpace_Go/ItemsSwagger/"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
编辑 1:谢谢 Volker 我可以通过重新安装 go 来解决 "import cyclic error" 问题,这是由 go_1.6 和 go_1.9 版本引起的冲突.
我 运行 "go run" 再次命令但没有成功。
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$ go run generate/cmd/items-swagger-server/main.go
# github.com/go-openapi/validate
github.com/go-openapi/validate/spec.go:46:16: undefined: loads.Document
github.com/go-openapi/validate/spec.go:57:16: undefined: loads.Document
github.com/go-openapi/validate/spec.go:59:16: undefined: loads.Document
github.com/go-openapi/validate/spec.go:75:10: undefined: loads.Document
github.com/go-openapi/validate/spec.go:78:21: undefined: loads.Document
# github.com/go-openapi/runtime/middleware/untyped
github.com/go-openapi/runtime/middleware/untyped/api.go:33:19: undefined: loads.Document
github.com/go-openapi/runtime/middleware/untyped/api.go:54:19: undefined: loads.Document
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$
我搜索了关于错误的有用信息 link 我找到了 here。
我还尝试通过删除旧的 .
来生成新的 swagger 文件
任何建议都会有所帮助。
正如@Volker 在评论中建议的那样,“不允许导入周期”已通过再次执行全新安装得到解决。问题是由版本 1.6 和 1.14 的多个 "Go" 安装引起的。重新安装 1.14 版修复了它。
其次,我遇到的关于 "loads.Document undefined " 的问题通过触发存储依赖关系的命令 "swagger generate server -A ItemsSwagger -f ../swagger/items-swagger.yml" 得到解决,所以我认为存在与路径相关的依赖关系问题,"Go" 找不到它。
对于 go-swagger 的新手,请参考以下链接:
https://github.com/go-swagger/go-swagger
https://goswagger.io/tutorial/todo-list.html
https://www.ribice.ba/swagger-golang/
重新安装"Go":
https://askubuntu.com/questions/742078/uninstalling-go-golang
我在 go-swagger 自动生成的文件中遇到错误 "import cycle not allowed",下面是代码。我还阅读了与此问题相关的其他答案,但没有成功。如果需要任何其他信息,请发表评论。
提前致谢
items_swagger.yaml
---
swagger: "2.0"
info:
description: Item list swagger for performing various op like create , delete , update.
title: ItemList
version: 1.0.0
consumes:
- application/json
produces:
- application/json
schemes:
- http
paths:
/createItem:
post:
tags:
- createItem
operationId: createOne
parameters:
- name: body
in: body
schema:
$ref: '#/definitions/item'
responses:
200:
description: Created
schema:
$ref: '#/definitions/item'
default:
description:
error
schema:
$ref: "#/definitions/error"
/updateItem:
put:
tags:
- updateItem
operationId: updateone
parameters:
- name: body
in: body
schema:
$ref: "#/definitions/item"
responses:
200:
description: OK
schema:
$ref: "#/definitions/item"
default:
description: error
schema:
$ref: "#/definitions/error"
/deleteItems:
delete:
tags:
- deleteItem
operationId: purgeItems
responses:
204:
description: Deleted
default:
description: error
schema:
$ref: "#/definitions/error"
definitions:
item:
type: object
required:
- id
- itemName
properties:
id:
type: integer
format: int64
readOnly: false
itemName:
type: string
format: string
readOnly: false
error:
type: object
required:
- message
- code
properties:
code:
type: integer
format: int
message:
type: string
当我生成它的模型时,它生成成功。
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$ swagger generate server -A ItemsSwagger -f ../swagger/items-swagger.yml -t generate
2020/04/14 20:25:19 validating spec /home/beast/Documents/WorkSpace_Go/ItemsSwagger/swagger/items-swagger.yml
2020/04/14 20:25:21 preprocessing spec with option: minimal flattening
2020/04/14 20:25:21 building a plan for generation
2020/04/14 20:25:21 generation target generate
2020/04/14 20:25:21 planning definitions
2020/04/14 20:25:21 planning operations
2020/04/14 20:25:21 grouping operations into packages
2020/04/14 20:25:21 planning meta data and facades
2020/04/14 20:25:21 rendering 2 models
2020/04/14 20:25:21 rendering 1 templates for model error
2020/04/14 20:25:21 name field error
2020/04/14 20:25:21 package field models
2020/04/14 20:25:21 creating generated file "error.go" in "generate/models" as definition
2020/04/14 20:25:21 executed template asset:model
2020/04/14 20:25:21 rendering 1 templates for model item
2020/04/14 20:25:21 name field item
2020/04/14 20:25:21 package field models
2020/04/14 20:25:21 creating generated file "item.go" in "generate/models" as definition
2020/04/14 20:25:21 executed template asset:model
2020/04/14 20:25:21 rendering 3 operation groups (tags)
2020/04/14 20:25:21 rendering 1 operations for create_item
2020/04/14 20:25:21 rendering 4 templates for operation ItemsSwagger
2020/04/14 20:25:21 name field createOne
2020/04/14 20:25:21 package field create_item
2020/04/14 20:25:21 creating generated file "create_one_parameters.go" in "generate/restapi/operations/create_item" as parameters
2020/04/14 20:25:21 executed template asset:serverParameter
2020/04/14 20:25:21 name field createOne
2020/04/14 20:25:21 package field create_item
2020/04/14 20:25:21 creating generated file "create_one_urlbuilder.go" in "generate/restapi/operations/create_item" as urlbuilder
2020/04/14 20:25:21 executed template asset:serverUrlbuilder
2020/04/14 20:25:21 name field createOne
2020/04/14 20:25:21 package field create_item
2020/04/14 20:25:21 creating generated file "create_one_responses.go" in "generate/restapi/operations/create_item" as responses
2020/04/14 20:25:21 executed template asset:serverResponses
2020/04/14 20:25:21 name field createOne
2020/04/14 20:25:21 package field create_item
2020/04/14 20:25:21 creating generated file "create_one.go" in "generate/restapi/operations/create_item" as handler
2020/04/14 20:25:21 executed template asset:serverOperation
2020/04/14 20:25:21 rendering 0 templates for operation group ItemsSwagger
2020/04/14 20:25:21 rendering 1 operations for delete_item
2020/04/14 20:25:21 rendering 4 templates for operation ItemsSwagger
2020/04/14 20:25:21 name field purgeItems
2020/04/14 20:25:21 package field delete_item
2020/04/14 20:25:21 creating generated file "purge_items_parameters.go" in "generate/restapi/operations/delete_item" as parameters
2020/04/14 20:25:21 executed template asset:serverParameter
2020/04/14 20:25:21 name field purgeItems
2020/04/14 20:25:21 package field delete_item
2020/04/14 20:25:21 creating generated file "purge_items_urlbuilder.go" in "generate/restapi/operations/delete_item" as urlbuilder
2020/04/14 20:25:21 executed template asset:serverUrlbuilder
2020/04/14 20:25:21 name field purgeItems
2020/04/14 20:25:21 package field delete_item
2020/04/14 20:25:21 creating generated file "purge_items_responses.go" in "generate/restapi/operations/delete_item" as responses
2020/04/14 20:25:21 executed template asset:serverResponses
2020/04/14 20:25:21 name field purgeItems
2020/04/14 20:25:21 package field delete_item
2020/04/14 20:25:21 creating generated file "purge_items.go" in "generate/restapi/operations/delete_item" as handler
2020/04/14 20:25:21 executed template asset:serverOperation
2020/04/14 20:25:21 rendering 0 templates for operation group ItemsSwagger
2020/04/14 20:25:21 rendering 1 operations for update_item
2020/04/14 20:25:21 rendering 4 templates for operation ItemsSwagger
2020/04/14 20:25:21 name field updateone
2020/04/14 20:25:21 package field update_item
2020/04/14 20:25:21 creating generated file "updateone_parameters.go" in "generate/restapi/operations/update_item" as parameters
2020/04/14 20:25:21 executed template asset:serverParameter
2020/04/14 20:25:21 name field updateone
2020/04/14 20:25:21 package field update_item
2020/04/14 20:25:21 creating generated file "updateone_urlbuilder.go" in "generate/restapi/operations/update_item" as urlbuilder
2020/04/14 20:25:21 executed template asset:serverUrlbuilder
2020/04/14 20:25:21 name field updateone
2020/04/14 20:25:21 package field update_item
2020/04/14 20:25:21 creating generated file "updateone_responses.go" in "generate/restapi/operations/update_item" as responses
2020/04/14 20:25:21 executed template asset:serverResponses
2020/04/14 20:25:21 name field updateone
2020/04/14 20:25:21 package field update_item
2020/04/14 20:25:21 creating generated file "updateone.go" in "generate/restapi/operations/update_item" as handler
2020/04/14 20:25:21 executed template asset:serverOperation
2020/04/14 20:25:21 rendering 0 templates for operation group ItemsSwagger
2020/04/14 20:25:21 rendering support
2020/04/14 20:25:21 rendering 6 templates for application ItemsSwagger
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "main.go" in "generate/cmd/items-swagger-server" as main
2020/04/14 20:25:21 executed template asset:serverMain
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "embedded_spec.go" in "generate/restapi" as embedded_spec
2020/04/14 20:25:21 executed template asset:swaggerJsonEmbed
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "server.go" in "generate/restapi" as server
2020/04/14 20:25:21 executed template asset:serverServer
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "items_swagger_api.go" in "generate/restapi/operations" as builder
2020/04/14 20:25:21 executed template asset:serverBuilder
2020/04/14 20:25:21 name field ItemsSwagger
2020/04/14 20:25:21 package field operations
2020/04/14 20:25:21 creating generated file "doc.go" in "generate/restapi" as doc
2020/04/14 20:25:21 executed template asset:serverDoc
2020/04/14 20:25:21 Generation completed!
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 generate/...
Error is occurring here , when I am trying to start the server.
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$ go run generate/cmd/items-swagger-server/main.go
import cycle not allowed
package main
imports generate/restapi
imports context
imports errors
imports internal/reflectlite
imports runtime
imports internal/cpu
imports runtime
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$
去环境输出
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$ go env
GOARCH="amd64"
GOBIN="/home/beast/Documents/WorkSpace_Go/ItemsSwagger/bin"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/beast/Documents/WorkSpace_Go/ItemsSwagger/"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
编辑 1:谢谢 Volker 我可以通过重新安装 go 来解决 "import cyclic error" 问题,这是由 go_1.6 和 go_1.9 版本引起的冲突.
我 运行 "go run" 再次命令但没有成功。
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$ go run generate/cmd/items-swagger-server/main.go
# github.com/go-openapi/validate
github.com/go-openapi/validate/spec.go:46:16: undefined: loads.Document
github.com/go-openapi/validate/spec.go:57:16: undefined: loads.Document
github.com/go-openapi/validate/spec.go:59:16: undefined: loads.Document
github.com/go-openapi/validate/spec.go:75:10: undefined: loads.Document
github.com/go-openapi/validate/spec.go:78:21: undefined: loads.Document
# github.com/go-openapi/runtime/middleware/untyped
github.com/go-openapi/runtime/middleware/untyped/api.go:33:19: undefined: loads.Document
github.com/go-openapi/runtime/middleware/untyped/api.go:54:19: undefined: loads.Document
beast@beast-VirtualBox:~/Documents/WorkSpace_Go/ItemsSwagger/src$
我搜索了关于错误的有用信息 link 我找到了 here。 我还尝试通过删除旧的 .
来生成新的 swagger 文件任何建议都会有所帮助。
正如@Volker 在评论中建议的那样,“不允许导入周期”已通过再次执行全新安装得到解决。问题是由版本 1.6 和 1.14 的多个 "Go" 安装引起的。重新安装 1.14 版修复了它。
其次,我遇到的关于 "loads.Document undefined " 的问题通过触发存储依赖关系的命令 "swagger generate server -A ItemsSwagger -f ../swagger/items-swagger.yml" 得到解决,所以我认为存在与路径相关的依赖关系问题,"Go" 找不到它。
对于 go-swagger 的新手,请参考以下链接:
https://github.com/go-swagger/go-swagger
https://goswagger.io/tutorial/todo-list.html
https://www.ribice.ba/swagger-golang/
重新安装"Go":
https://askubuntu.com/questions/742078/uninstalling-go-golang