如何使用go模块的内部软件包?
我在我的项目中使用go模块。我在内部文件夹中共享了代码如何使用go模块的内部软件包?,go,shared,go-modules,Go,Shared,Go Modules,我在我的项目中使用go模块。我在内部文件夹中共享了代码 . ├── README.md ├── internal │ └── shared │ ├── request.go │ └── request_test.go └── web ├── README.md └── go └── src └── webservice ├── go.mod ├──
.
├── README.md
├── internal
│ └── shared
│ ├── request.go
│ └── request_test.go
└── web
├── README.md
└── go
└── src
└── webservice
├── go.mod
├── go.sum
└── main.go
在使用go模块时,我无法从webservice访问内部/共享。我得到以下错误:
package internal/shared is not in GOROOT (/usr/local/go/src/internal/shared)
从main.go中的webservice导入时:
import "internal/shared"
注意:我正在尝试与上面未列出的另一个mod共享内部/共享
如何解决此问题?您的
go.mod
内部web/go/src/webservice
表示此软件包位于与您的内部/共享
软件包不同的模块中。
当您将go.mod
和go.sum
移动到整个项目的根位置时,它应该会起作用。然后web/go/src/webservice
和internal/shared
包将位于一个go模块中
这对我很有用:
.
├── go.mod
├── go.sum
├── internal
│ └── shared
│ └── request.go
│
└── web
└── go
└── src
└── webservice
└── main.go
在导入internal/shared
包时,您应该在main.go
中包含整个go模块
路径
因此,在您的main.go
中,导入应该类似于import“$your go module/internal/shared”
关于内部软件包的更多信息我最终通过向内部/共享软件包添加go.mod并在webservice中编辑go.mod进行了修复,方法如下:
module webservice
go 1.14
replace example.com/shared => ../../../../internal/shared/
require (
github.com/gorilla/mux v1.7.4
github.com/spf13/viper v1.6.3
github.com/stretchr/testify v1.5.1
example.com/shared v0.0.0-00010101000000-000000000000
)
example.com/shared v0.0.0-0000101000000-000000000000是由“go mod init webservice”
生成的。在我的例子中,代码编译得很好,但GoLand IDE无法识别导入。这个问题与描述的一模一样
我正在使用go模块和GOPATH之外的目录。外部依赖关系可以很好地识别,GoLand“找不到”我的项目中的包。
修复方法是勾选设置/首选项->转到->转到模块(vgo)下启用转到模块(vgo)集成的复选框
这里是相同的屏幕截图
internal
不是webservice
模块的一部分。将internal
移动到正确的位置,或者将整个项目作为单个模块。代码布局很不寻常,有没有这样的结构原因?