Как настроить кастомный GOPATH?
Коллеги, помогите разобраться. Вопрос избитый, но решить по ссылкам в сети пока не получилось (https://go.dev/wiki/SettingGOPATH).
Пытаюсь настроить кастомный gopath, чтобы мои и импортируемые пакеты лежали отдельно от стандартных гошных.
ГО установлен здесь:
D:\Programm Files\Go
Мой ворскспейс здесь:
D:\Kirill_disk_D\GoWorkspace, тут три папки - bin, src, pkg
GOPATH такой:
D:\Kirill_disk_D\GoWorkspace;D:\Programm Files\Go
В каталоге D:\Kirill_disk_D\GoWorkspace\src
лежит 2 пакета: customtext и test
D:\Kirill_disk_D\GoWorkspace\src\customtext\customtext.go:
package customtext
const (
NameFrst = "Kirill",
NameScnd = "Sasha"
)
D:\Kirill_disk_D\GoWorkspace\src\test\test.go:
package main
import (
"customtext"
"fmt"
)
func main() {
fmt.Println("Привет", customtext.NameFrst)
}
По запуску test.go:
$ go run "d:\Kirill_disk_D\GoWorkspace\src\test\test.go"
Не видит нужной src из GOPATH и отвечает, что нужного пакета в GOPATH по умолчанию нет:
test.go:4:2: package customtext is not in std (D:\Programm Files\Go\src\customtext)
У меня стоит версия go1.23.0, винда 11.
По команде в cmd:
C:\Users\Kirill>go env -w GOPATH=d:\Kirill_disk_D\GoWorkspace
Отвечает, что на даст переопределить GOPATH:
warning: go env -w GOPATH=... does not override conflicting OS environment variable
Вопрос: как сделать так, чтобы Go видел пакеты из кастомного GOPATH? Что я делаю не так? Заранее спасибо!
Ответы (1 шт):
GOPATH
- это тяжелое наследие прошлого. Имея на руках go 1.23, пользоваться этой переменной просто грешно. Нужно сразу переходить на правильные рельсы - модули и воркспейсы.
Вокрспейс - это способ организации нескольких модулей Го в единой связке. При наличии воркспейса Го ищет исходники модулей не где-то там, а в зарегистрированных соседних каталогах воркспейса.
Вот как это можно сделать в вашем случае:
- создать папку
workspace
, инициализировать в ней воркспейс командойgo work init
- создать папку
workspace\customtext
, создать в ней модуль командойgo mod init customtext
- создать папку
workspace\tests
, создать в ней модуль командойgo mod init tests
- Добавить созданные модули в вокрспейс командами
go work use customtext
иgo work use tests
Вот как это может выглядеть:
PS D:\tmp\try-go> mkdir workspace
Directory: D:\tmp\try-go
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 09.09.2024 0:30 workspace
PS D:\tmp\try-go> cd .\workspace\
PS D:\tmp\try-go\workspace> go work init
PS D:\tmp\try-go\workspace> mkdir customtext
Directory: D:\tmp\try-go\workspace
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 09.09.2024 0:30 customtext
PS D:\tmp\try-go\workspace> cd .\customtext\
PS D:\tmp\try-go\workspace\customtext> go mod init customtext
go: creating new go.mod: module customtext
PS D:\tmp\try-go\workspace\customtext> cd ..
PS D:\tmp\try-go\workspace> mkdir tests
Directory: D:\tmp\try-go\workspace
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 09.09.2024 0:31 tests
PS D:\tmp\try-go\workspace> cd .\tests\
PS D:\tmp\try-go\workspace\tests> go mod init tests
go: creating new go.mod: module tests
PS D:\tmp\try-go\workspace\tests> cd ..
PS D:\tmp\try-go\workspace> go work use .\customtext\
PS D:\tmp\try-go\workspace> go work use .\tests\
В папке workspace
файл go.work
содержит структуру воркспейса
go 1.21.5
use (
./customtext
./tests
)
После такой настройки файлы из tests
будут успешно находить пакет customtext
.
Полный пример здесь: https://github.com/pakuula/StackOverflow/tree/main/go/1593138/workspace