是否可以从模块中导入 ~/go/src/ 中的本地包?

Is that possible to import a local package inside ~/go/src/ from a module?

我用的是go模块,文件结构是这样的:

~/some_path/goapp/go.mod
~/some_path/goapp/go.sum
~/some_path/goapp/main.go

~/go/src/fakedomain.com/fakeuser/foo/foo.go

里面main.go,我试过

import fakedomain.com/fakeuser/foo

但是,它根本不起作用。 我尝试将以下内容添加到 go.mod:

require fakedomain.com/fakeuser/foo 

require fakedomain.com/fakeuser/foo
replace fakedomain.com/fakeuser/foo /home/user/go/src/fakedomain.com/fakeuser/foo

None 其中有效。我怎样才能做到这一点?

已编辑

这个问题是关于如何从一个 在~/go/src/之外。

换句话说,在~/go/src/ 之外的模块将导入~/go/src/ 内的本地包。我以为我可以直接导入它(那是我以前没有模块时所做的),但我错了。原来我要把~/go/src/里面的本地包也变成一个模块

非常感谢@MartinTournoij、@Peter、@DaveC 的帮助和评论我已经投票。按照所有指示进行操作后,我终于成功了。

(顺便说一句,我真的不应该太相信 VSCode 错误消息。因为我通常检查来自 VSCode 的错误。因此我没有尝试 go build 在问这个问题之前。我认为他们应该 return 同样的错误,但他们不是。 go build 提供了比 VSCode 更合理的错误信息。)

存在三个问题。

  • 缺少 go.mod 中 require 的版本
  • 在 go.mod
  • replace 中缺少 =>
  • 缺少 foo 包的 go.mod

所以要让它发挥作用:

文件结构:

~/some_path/goapp/go.mod
~/some_path/goapp/go.sum
~/some_path/goapp/main.go

~/go/src/fakedomain.com/fakeuser/foo/foo.go
~/go/src/fakedomain.com/fakeuser/foo/go.mod

~/some_path/goapp/go.mod:

...
require fakedomain.com/fakeuser/foo v0.0.0
replace fakedomain.com/fakeuser/foo => /home/user/go/src/fakedomain.com/fakeuser/foo

main.go:

package main
import fakedomain.com/fakeuser/foo
...

~/go/src/fakedomain.com/fakeuser/foo/go.mod:

module fakedomain.com/fakeuser/foo

go 1.12

现在我会清楚地解释如何使用go.mod,按照这个,你应该能够使用它。

这是我的目录设置(相应地使用你的修改): my_name/git/Project

在 ..../Project 中开始项目时,请执行 go mod init /whatever-directory-youre-in/Project。这将在同一目录中添加 go.modgo.sum

现在每次导入都可以采用以下形式, import /whatever-directory-youre-in/Project/whatever-package

必须这样做!