Keval Bhogayata
Keval Bhogayata

Reputation: 6666

Issue with developing a multi-module Go workspace

My folder structure looks something like this... (say my git repo name is demorepo)

demorepo
|--directory1
   |-- (no go.mod at this level)
   |--module1
      |--package1 --------->--------------->--------------------->----|
      |--go.mod (github.com/demorepo/directory1/module1)              |
      |--go.sum                                                       |
   |--module2                                                         |
   |--module3                                                         |
|--directory2                                                         |
  |-- (no go.mod at this level)                                       |
  |--newmodule ------<------------<------------------<----------------|

Now, I want to use a function defined in "package1" in my "newmodule"

When I hit go get <repo_address>/directort1/module1/package1 at "new_module" it says ....

github.com/<repo>@upgrade found (v0.0.0-20211215055943-92e412ad4a12), but does not contain package github.com/<repo>/directory1/module1/package1

Upvotes: 2

Views: 3226

Answers (2)

rustyx
rustyx

Reputation: 85341

There is a proposal for a Go Workspace File for Go 1.18 which should simplify this task.

Meanwhile, you can use the replace directive in your go.mod file to refer to a module located on a local filesystem.

demorepo/directory1/module1/go.mod:

module github.com/<repo>/directory1/module1

demorepo/directory2/newmodule/go.mod:

module github.com/<repo>/directory2/newmodule

replace github.com/<repo>/directory1/module1 => ../../directory1/module1

Now you can import github.com/<repo>/directory1/module1/package1 in newmodule normally and it'll refer to the local module1.

You might not want the replace directive in the go.mod file itself, and instead make a copy of it e.g. go.local.mod and use it when building your project: go build -modfile go.local.mod . (can also add go.local.mod to .gitignore).

Upvotes: 3

Ashutosh Singh
Ashutosh Singh

Reputation: 1047

Approach :

If you want to use module1 inside newModule then you should make one new repo for module1 put your logic there push it in github. please make sure you should use appropriate version for the library.

import it as a library and it will work.

Also refer the official docs of module dependency and also check root level dependency.

Official docs : https://go.dev/blog/using-go-modules

Upvotes: 0

Related Questions