首页 > 解决方案 > 如何将内部包与 go 模块一起使用?

问题描述

我在我的项目中使用 go 模块。我在内部文件夹中共享了代码。

.
├── README.md
├── internal
│   └── shared
│       ├── request.go
│       └── request_test.go
└── web
    ├── README.md
    └── go
        └── src
            └── webservice
                ├── go.mod
                ├── go.sum
                └── main.go

使用 go 模块时,我无法从 web 服务访问内部/共享。我收到以下错误:

package internal/shared is not in GOROOT (/usr/local/go/src/internal/shared)

在 main.go 从 web 服务导入时:

import "internal/shared"

注意:我正在尝试与上面未列出的另一个 mod 共享内部/共享。

如何解决这个问题?

标签: gosharedgo-modules

解决方案


您的go.mod内部web/go/src/webservice表明此包位于与您的internal/shared包不同的模块中。当您将您的go.mod和移动go.sum到整个项目的根目录时,它应该可以工作。然后web/go/src/webserviceinternal/shared包将在一个go module中。

这对我有用:

    .
    ├── go.mod
    ├── go.sum
    ├── internal
    │   └── shared
    │       └── request.go
    │  
    └── web
        └── go
            └── src
                └── webservice
                    └── main.go

并且在将包go-module导入.internal/sharedmain.go

所以,在你main.go的导入里面应该看起来像import "$your-go-module/internal/shared"

更多关于内部包的信息在这里


推荐阅读