模块和导入文件夹问题

罗基托:

我对Go导入和模块的工作方式有一些疑问。我有一个具有以下结构的项目:

My-Project
|- Program 1
   |- main.go
   |- go.mod
|- Program 2
   |- main.go
   |- go.mod
|- Support
   |- go_file.go

这两个程序具有不同的模块“定义”。我需要包括在两个程序之间共享的“ Support”文件夹。我试过了

import "My-Project/Support" 

在Program1的main.go中,但这无法正常工作,因为无法解析支持。我该怎么做?

戴夫C:

如前所述,您Support/go_file.go不在任何模块中,因此无法使用Go模块导入。

所有三个软件包都可以使用一个模块,也可以使用三个单独的模块(例如,将Support放入其自己的模块中)。您也可以使用子模块。

单个模块:

对于单个模块,您可以执行以下操作:

└── My-Project
    ├── go.mod
    ├── Program\ 1
    │   └── main.go
    ├── Program\ 2
    │   └── main.go
    └── Support
        └── go_file.go

项目级别go.mod如下所示:

module github.com/My-Name/My-Project

(用适当的模块名称代替),然后这两个main软件包都将导入支持软件包:

import "github.com/My-Name/My-Project/Support"

注意Go软件包通常不以这样的大写字母开头。

对于这样的设置(带有将软件包和命令混合在一起的单个存储库)而言,更为惯用的是将命令放入cmd子目录的golang.org/x/tools布局(例如,参见布局)。看起来像这样:

└── My-Project
    ├── cmd
    │   ├── program1
    │   │   └── main.go
    │   └── program2
    │       └── main.go
    ├── go.mod
    ├── internal
    │   └── support
    │       └── support.go
    └── other-package
        └── some-other-package.go

这里的support包是在内部子目录,这使得从外面不可导入My-Project其中-作为other-package由任何人是可导入。

同样,go.mod将定义模块名称,该模块名称设置要用于所有import语句的前缀。

单独的模块:

要使用单独的模块,您可以执行以下操作:

└── My-Project
    ├── Program\ 1
    │   ├── go.mod
    │   └── main.go
    ├── Program\ 2
    │   ├── go.mod
    │   └── main.go
    └── Support
        ├── go_file.go
        └── go.mod

My-Project/Program 1/go.mod将是这样的:

module "github.com/My-Name/My-Project/Program 1"

require (
        github.com/My-Name/My-Project/Support
)

导入将与单个模块示例中的导入相同。同样适用于Program 2因为Support/go.mod它看起来像:

module github.com/My-Name/My-Project/Support

对于本地开发,您可能还希望/需要replace每个程序中的指令go.mod来使用支持模块的本地工作副本(go mod edit -replace github.com/My-Name/My-Project/Support=../Support应添加此副本)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

  3. 3

    创建Windows Phone 8应用并将其连接到数据库的最佳方法(最好是SQL Server)

  4. 4

    为什么Java中的System.out.println()打印到控制台?

  5. 5

    卷曲函数无法解析来自bash中变量的代理

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    设置与Apache POI Excel表散点图标记图标的颜色

  8. 8

    将Qt Pyside2与asyncio await语法一起使用?

  9. 9

    崇高的文字+蟒蛇的蟒蛇

  10. 10

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  11. 11

    OpenJDK的和AdoptOpenJDK的区别

  12. 12

    大型数据集缓存到Spark内存中时,“超出了GC开销限制”(通过sparklyr和RStudio)

  13. 13

    “执行测试CMAKE_HAVE_LIBC_PTHREAD”失败实际上是什么意思?

  14. 14

    使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

  15. 15

    React中的ForwardRefExoticComponent和ForwardRefRenderFunction有什么区别?

  16. 16

    猫鼬查找结果,然后将字段替换为findOne

  17. 17

    如何降级Google Colab的Torch版本

  18. 18

    Keras提前停止回调错误,val_loss指标不可用

  19. 19

    如何避免VSCode中的“导入路径不能以.ts扩展名结尾”错误?

  20. 20

    Nuxt.JS:如何在页面中获取路由URL参数

  21. 21

    是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

热门标签

归档