是否可以从模块中导入 ~/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.mod
和 go.sum
。
现在每次导入都可以采用以下形式,
import /whatever-directory-youre-in/Project/whatever-package
必须这样做!
我用的是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 的
- 缺少
foo
包的go.mod
。
replace
中缺少 =>
所以要让它发挥作用:
文件结构:
~/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.mod
和 go.sum
。
现在每次导入都可以采用以下形式,
import /whatever-directory-youre-in/Project/whatever-package
必须这样做!