具有不同模块但主模块位于根目录中的项目

Project with different modules but main module in root

提问人:Manuelarte 提问时间:11/15/2023 最后编辑:Jonathan HallManuelarte 更新时间:11/15/2023 访问量:42

问:

我想在 Go 中创建一个库,一个用于 Gorm 的实用程序库。问题是要创建测试,我还需要一个驱动程序(如 postgresql 或 mysql),但我不希望这些驱动程序包含在“main”项目的 go.mod 中。我知道在 Java 中可以只包含测试文件夹的库,但我知道这在 Go 中是不可能的。所以我想知道是否有可能在项目中有一个“子模块”,其中该子模块将包含使用不同驱动程序的测试。所以基本上要有这样的东西:

我的项目:

  • my_library.去
  • test_module/
    • my_library_postgres_test.go // 使用 postgres 驱动程序测试 my_library.go 的功能
    • my_library_mysql_test.go // 使用 mysql 驱动测试 my_library.go 的功能
    • go.mod // 包括主项目以及 Postgres 和 MySQL 驱动程序
  • go.mod // 包含 gorm 依赖项的主 go.mod(无需任何驱动程序)
模块 数据库连接 go-gorm

评论

0赞 mkopriva 11/15/2023
是的,可以有一个子模块。
0赞 Manuelarte 11/15/2023
所以我会创建一个文件夹,然后调用 go mod init,在那个 go.mod 中,我如何引用“父”模块?
3赞 mkopriva 11/15/2023
github.com/golang/go/wiki/......
1赞 Volker 11/15/2023
您能解释一下为什么您认为任何从您的项目中导入某些包的代码“也需要导入这些驱动程序”,因为它们的版本列在 go.mod 中吗?你认为这些导入以某种方式“自动”发生吗?或者你认为如果有人使用你项目中的包 A,但没有手动导入 go.mod 中列出的所有内容,它就不会构建?仔细看看 go.mod:它包含模块,而不是包。
1赞 Volker 11/15/2023
go.mod 文件“固定”您导入的模块版本。就这样。它不是“请在此处包含所有内容”的列表。恕我直言,“测试依赖”的整个想法非常奇怪,尽管在不同的技术中很常见。

答: 暂无答案