Работа с локальными модулями в go
Есть папка go
в которой также есть две папки - greeting и hello
greeting.go
package greeting
import "fmt"
func Hello() {
fmt.Println("Hello!")
}
func Hi() {
fmt.Println("Hi!")
}
hello.go
package main
import gr "greet/greeting"
func main() {
gr.Hello()
gr.Hi()
}
Получается, я хочу импортировать greeting в hello, но ошибка в том, что в GOPATH указан путь по умолчанию, в диск C, у меня же, проект go находится на диске D. Конечно можно создать терминал и в нем указать путь в GOPATH для go, но придется каждый раз менять GOPATH для каждого нового созданного терминала. Второй вариант - go.mod. Но при инициализации go.mod
он ищет пакет в GOROOT пути.
Как можно решить эту проблему, подскажите пожалуйста?
Ответы (2 шт):
greeting/greeting.go
package greeting
import "fmt"
func Hello() {
fmt.Println("Hello!")
}
func Hi() {
fmt.Println("Hi!")
}
greeting/go.mod
module greeting
go 1.17
hi/main.go
package main
import gr "greet/greeting"
func main() {
gr.Hello()
gr.Hi()
}
hi/go.mod
module Test
go 1.17
require (
greet/greeting v0.0.0 // indirect
)
replace greet/greeting => ../greeting
Больше не работает :( К сожалению, поведение с тех пор изменили. См. https://go.dev/wiki/Modules#do-modules-work-with-relative-imports-like-import-subdir Теперь надо писать в go.mod так:
module example.com/me/hello
require (
example.com/me/goodbye v0.0.0
)
replace example.com/me/goodbye => ../goodbye


