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?
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.
require
in go.mod=>
from replace
in go.modgo.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!