Go get cannot find local packages when using multiple modules in a repo
Full error message
I'm having issues with go's new module system, as I'd like to define a local module and import it in the main program. The local package resides in a folder of the main package/root folder. Imagine the following project structure outside the $GOPATH.
Project structure
./main.go
package main
import "fmt"
import "example.com/localModule/model"
func main() {
var p = model.Person{name: "Dieter", age:25}
fmt.Printf("Hello %s\n", p.name)
}
./model/person.go
package model
type Person struct {
name string
age int
}
In the root folder I initialized a module by calling
go mod init example.com/localModule
In the model/ folder I then initialized the submodule by calling
go mod init example.com/localModule/model
The error
In the root folder calling the following commands fail.
$ go get
go build example.com/localModule/model: no Go files in
$ go build
main.go:4:8: unknown import path "example.com/localModule/model": cannot find module providing package example.com/localModule/model
The error message for go get is cut off, I din't parse it wrongly.
I do not plan on pushing the module to a server and and just needed a way of referencing the local package model, so I chose example.com/localModule/ and example.com/localModule/model respectively.
I'm using go1.11 darwin/amd64 on a Macbook running MacOS 10.13.6.Solutionsource: stackoverflow \u2197
You can have local "sub" modules like you ask for by adding a require statement and a matching replace statement with a relative file path in go.mod. In the "root" ./go.mod: module example.com/localModule require example.com/localModule/model v0.0.0 replace example.com/localModule/model v0.0.0 => ./model
API access
Get this solution programmatically \u2014 free, no authentication.
curl https://depscope.dev/api/error/f0cd14bcd5f35b132554cdb20a3673a4f486aecf2b5e61bd9d78c8efbca4ffa0hash \u00b7 f0cd14bcd5f35b132554cdb20a3673a4f486aecf2b5e61bd9d78c8efbca4ffa0