Following the steps outlined in the below doc did not work with 1.21.
All help appreciated.
Following the steps outlined in the below doc did not work with 1.21.
All help appreciated.
I just tried it on 1.21.1
and works for me.
Your link points to the middle of a tutorial. Have you checked the previous section where they make the greetings
-module?
Anyhow, this what you end up with:
.
├── greetings
│ ├── go.mod // defaults of this file
│ │ // (created by go mod init) are good
│ └── greetings.go // package greetings AKA a library/module
└── hello
├── go.mod // uses a replace-directive that tells go-code
│ // in this package where "example.com/greetings"
│ // can be found locally in stead of online
└── hello.go // package main AKA an executable with a main-func
Here are the steps I did:
work
work/greetings
(package greetings
)go mod init example.com/greetings
in this directory. This creates a go.mod
file for this module.work/greetings/greetings.go
work/hello/
(package main
)go mod init example.com/hello
in this directory. Again a go.mod
file is made.work/greetings/go.mod
so that it considers every import to example.com/greetings
that it finds in code, to actually use ../greetings
(this was new for me, it’s very cool that this is possible, before I was just editing my .go
-code but apparently you can redirect with the go.mod
-file. VERY COOL)go run hello.go
in work/hello
. The (quite amazing) go build system will do all the rest.For step 7, it was new for me that we can use go mod edit
to (more safely) edit the go.mod-file. I had done some manual editing of that file in the past but it was quite interesting to read go help mod edit
.
For reference, this is what my hello/go.mod
file looks like after the command.
> go mod edit -replace example.com/greetings=../greetings
module example.com/hello
go 1.21.1
replace example.com/greetings => ../greetings
require example.com/greetings v0.0.0-00010101000000-000000000000
Thanks. But according to the tutorial we are supposed to change the calling module hello.
From the command prompt in the hello directory, run the following command:
$ go mod edit -replace example.com/greetings=../greetings
Yes, we are changing work/hello/go.mod
. As you can see in my code fragment of go.mod
on the first line, this is the module we are changing.
The replace
-statements basically take care of changing import "example.com/greetings"
in hello.go
on the fly to import "../greetings"
. Manually changing the imports in hello.go
like that, would be an alternative solution but I think it’s nice that go mod
supports this replace-mechanism.
Thanks for the help.
No problem. It was nice discovering this functionality of go mod
.
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.