Самое простое и готовое к работе решение - поместить ваш пакет / модуль database
в VCS (например, github.com), чтобы другие пакеты (внутри других модулей) могли просто ссылаться на него, импортируя это как:
import "github.com/someone/database"
Если вы сделаете это, вам даже не придется вручную манипулировать файлами go.mod
, все будет позаботиться об инструменте go: он автоматически распознает и разрешит эту зависимость, загрузит и установит необходимый пакет , а также автоматически обновит go.mod
.
Оставаясь полностью на локальном диске
Если вы не хотите использовать VCS (например, вы просто экспериментируете или еще не решили, что использовать), тогда вы все равно можете это сделать. как подробно описано в официальном Go Wiki: Могу ли я работать полностью вне VCS на моей локальной файловой системе?
Итак, вы создали папку database
вне GOPATH
и создали в ней модуль. И вы создали другой модуль, назовем его main
, и вы хотите использовать этот пакет database
.
Что вы должны сделать, это:
go.mod
вашего main
модуля должен указывать пакет database
как «требование». Дайте временное имя VCS вашему пакету database
:
require (
example.com/me/database v0.0.0
)
Вы должны указать инструменту go, где находится этот пакет, потому что полное имя пакета, которое мы использовали, является просто временным / фантазийным. Используйте директиву replace
, чтобы этот пакет database
указывал на папку на вашем локальном диске; Вы можете использовать абсолютные и относительные пути:
replace example.com/me/database => ../database
И это все.
Рабочий пример
Давайте посмотрим на рабочий пример. Давайте создадим модуль pretty
. Создайте папку pretty
с двумя файлами в ней:
pretty.go:
package pretty
import "fmt"
func Pretty(v ...interface{}) {
fmt.Println(v...)
}
go.mod (можно создать, запустив go mod init pretty
):
module pretty
Теперь давайте создадим еще один основной модуль. Давайте создадим папку osinf
(она может быть любой) рядом с папкой pretty
. В нем 2 файла:
osinf.go (обратите внимание, что мы намереваемся использовать наш pretty
пакет / модуль, мы импортируем его "example.com/me/pretty"
):
package main
import "example.com/me/pretty"
func main() {
pretty.Pretty("hi")
pretty.Pretty([]int{1, 3, 5})
}
go.mod:
module main
require example.com/me/pretty v0.0.0
replace example.com/me/pretty => ../pretty
И это все.
Запуск go run osinf.go
в папке osinf
, вывод:
hi
[1 3 5]