Вопрос по go – Ошибка «невозможно загрузить пакет: пакет my_prog: найдены пакеты my_prog и main»

50

В моем 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 должен идти в своей собственной папке? Если так, то в чем причина этого?

Ваш Ответ

3   ответа
11

если все, что вы пытаетесь сделать, это разбить файл main.go на несколько файлов, а затем просто назвать другие файлы как «основной пакет», если только вы определяете основную функцию в одном из этих файлов, вы можете идти.

52

Структура источника определяется вКак написать код Go.

Пакет - это компонент, который вы можете использовать в более чем одной программе, который вы можете публиковать, импортировать, получать по URL-адресу и т. Д. Поэтому имеет смысл иметь собственный каталог настолько, насколько программа может иметь каталог.

Я пока ничего не пытаюсь установить, просто собираю программу. Программа зависит от обоих пакетов. Я обнаружил, что положить основной пакет в/src/my_prog/ и пакет my_prog в/src/my_prog/my_prog/ работает. TheTeaMan
Да, вот как это работает. На практике я помещаю в свой «основной» пакет очень мало кода, только тот, который нельзя использовать в других программах. Denys Séguret
Это довольно раздражает, чтобы быть откровенным. Я не вижу причин отделять основную точку входа от остальной части программы. Я приму этот ответ. TheTeaMan
о хорошо Я откажусь и приму позже. Спасибо TheTeaMan
Да, но действительно ли основной пакет квалифицируется как независимый пакет? Насколько я понимаю, пакет main - это своеобразный язык, который обеспечивает точку входа (очень похоже на классы Java, которые имеют общедоступную статическую main). TheTeaMan
0

$GOPATH каталог или уже внутри вашего рабочего пространства / пакета.

Например: если ваш$GOPATH = "c:\go", убедитесь, что пакет внутриC:\Go\src\pkgName

Похожие вопросы