Golang: Ошибка "невозможно загрузить пакет: пакет my_prog: найденные пакеты my_prog и main"
В моем GOPATH у меня есть что-то вроде этого:
/bin/
/pkg/
/src/
/src/my_prog/
/src/my_prog/main.go
/src/my_prog/d_interface.go
/src/my_prog/d_struct_that_implements_the_interface.go
В main.go
у меня package main
, в d_interface.go
и d_struct_that_implements_the_interface.go
у меня есть package my_prog
.
Когда я пытаюсь go build my_prog
, я получаю следующую ошибку:
can't load package: package my_prog: found packages my_prog (d_interface.go) and main (main.go) in C:\dev\Code\Go\src\my_prog
Означает ли это, что любой файл, принадлежащий package main
, должен находиться в его собственной папке? Если да, то в чем причина этого?
Ответы
Ответ 1
Да, каждый пакет должен быть определен в его собственном каталоге.
Структура источника определена в Как писать код перехода.
Пакет - это компонент, который вы можете использовать в нескольких программах, которые вы можете публиковать, импортировать, получать из URL-адреса и т.д. Поэтому имеет смысл иметь свой собственный каталог столько, сколько может иметь программа каталог.
Ответ 2
Кроме того, если все, что вы пытаетесь сделать, это разбить файл main.go на несколько файлов, то просто назовите другие файлы "main package", если только вы определяете основную функцию в одном из этих файлов, вы хорошо идти.
Ответ 3
убедитесь, что ваш пакет установлен в каталог $gopath или уже внутри вашей рабочей области.
Например: если ваш $gopath = "c:\go", убедитесь, что пакет внутри "C:\Go\src\pkg\github.com"