是否可以从模块中将〜/ go / src /导入本地包? [关闭]

I am using go module, the file structure is like this:

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

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

Inside main.go, I tried to do

import fakedomain.com/fakeuser/foo

But, it doesn't work at all. I tried to add the following to go.mod:

require fakedomain.com/fakeuser/foo 

OR

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

None of them works. How can I achieve this?

Edited

This question is about how to import a local package inside ~/go/src/ from a module which is outside ~/go/src/.

In other words, the module which is outside ~/go/src/ will import a local package inside ~/go/src/. I thought I could import it directly (that is what I did in the old days without module), but I was wrong. It turns out that I have to make the local package inside ~/go/src/ become a module too.

Thank @MartinTournoij, @Peter, @DaveC very much for their help and comments which I have upvoted. After following all the directions, I finally make it work.

(Btw, I really shouldn't trust VSCode error message too much. Because I normally check errors from VSCode. Thus I didn't try go build before asking this question. I thought they should return the same error, but they are not. go build provides more reasonable error messages than VSCode.)

There were three problems.

  • Missing version from require in go.mod
  • Missing => from replace in go.mod
  • Missing go.mod for foo package.

So to make it work:

File Structure:

~/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

I'll clearly explain how to use go.mod now, follow this and you should be able to get it working.

This is my directory setup (modify using yours accordingly): my_name/git/Project

As you start a project in ..../Project, do go mod init /whatever-directory-youre-in/Project. This will add go.mod and go.sum in the same directory.

Now every import can be of the form, import /whatever-directory-youre-in/Project/whatever-package

That must do!