I ran into a repo that seems to be a Go module, but there's no go.mod
file in it: github.com/confluentinc/confluent-kafka-go.
Is it ok for a go module to have no go.mod
file with dependencies, or the authors of that library just didn't migrate to modules yet?
Dependency modules do not need to have explicit go.mod
files.
The “main module” in module mode — that is, the module containing the working directory for the go
command — must have a go.mod
file, so that the go
command can figure out the import paths for the packages within that module (based on its module path), and so that it has a place to record its dependencies once resolved.
In addition, any modules slotted in using replace
directives must have go.mod
files (in order to reduce confusion due to typos or other errors in replacement paths).
However, in general a module that lacks an explicit go.mod
file is valid and fine to use. Its effective module path is the path by which it was require
d, which can be a bit confusing if the same repository ends up in use via multiple paths. Since a module with no go.mod
file necessarily doesn't specify its own dependencies, consumers of that module will have to fill in those dependencies themselves (go mod tidy
will mark them as // indirect
in the consumer's go.mod
file).