Golang中如何解决import cycle not allowed的问题
Golang中如何解决import cycle not allowed的问题 我知道这可能是一个常见问题,但经过大约一小时的搜索,我仍然没能解决它……
我通过以下命令生成了一个 go.mod 文件:
go mod init github.com/go-sql-driver/mysql
module github.com/go-sql-driver/mysql
go 1.16
还有一个 main.go 文件:
package main
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func main() {
}
当我运行 go run main.go 时,得到以下错误:
package command-line-arguments
imports github.com/go-sql-driver/mysql
imports github.com/go-sql-driver/mysql: import cycle not allowed
更多关于Golang中如何解决import cycle not allowed的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
这就是问题所在!我误解了 mod init 的作用。感谢您的帮助!!
更多关于Golang中如何解决import cycle not allowed的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你好,@jvannier,欢迎来到论坛。
我怀疑问题在于你在这里将模块命名为了“GitHub - go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go’s (golang) database/sql package”:
jvannier 说:
go mod init github.com/go-sql-driver/mysql
但是,你在该命令中指定的模块名本应是你自己代码的模块名。当你在下面这里导入“GitHub - go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go’s (golang) database/sql package”时:
jvannier 说:
_ "github.com/go-sql-driver/mysql"
你通过告诉 Go 编译器你自己的包叫“GitHub - go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go’s (golang) database/sql package”,然后又导入了一个具有相同包标识符的模块,从而“搞混”了 Go 编译器。
这是一个典型的模块命名冲突问题。你的 go.mod 文件将模块声明为 github.com/go-sql-driver/mysql,这与你要导入的第三方包完全相同,导致Go认为你在尝试导入自己。
解决方案:
- 修改
go.mod文件,使用你自己的模块名(不要与第三方包同名):
module myapp
go 1.16
或者使用你自己的仓库路径:
module github.com/yourusername/myapp
go 1.16
- 更新后的完整示例:
go.mod:
module myapp
go 1.16
require github.com/go-sql-driver/mysql v1.6.0
main.go:
package main
import (
"database/sql"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "user:password@/dbname")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 使用数据库连接
}
- 运行前执行依赖同步:
go mod tidy
go run main.go
关键点: 模块名必须是唯一的,不能与你要导入的第三方包同名。Go模块系统通过模块名来区分不同的包,同名会导致循环导入的假象。

