Как вести множество проектов на Go и не запутаться с папками и импортами?
Всем привет!
Работаю с Go недавно. Сейчас пишу под Windows (только с точки зрения удобства и комфорта), иногда компилирую под виртуалкой Linux, чтобы посмотреть как себя ведет.
Суть вопроса:
Допустим, сам Go установлен в C:\Go, а проекты я держу в C:\apps\go\. Вот, мне понадобилось создать новый проект, назовем его supertool. Я создаю папку, и получаю C:\apps\go\supertool\. Вопрос №1: основной файл данного приложения должен называться main.go? Далее, внутри этого приложения, я хочу сделать пакет. Т.е., мой supertool будет иметь пакет superpackage. Я создаю папку и файл C:\apps\go\supertool\superpackage\superpackage.go, где объявляю package superpackage (или package supertool/superpackage?). Далее, из основного файла пакета мне нужно импортировать этот пакет, я делаю... оп, вот тут и заминка, Вопрос №2: Как его импортировать-то? Если вписать import "superpackage" — не скомпилируется, да и не должно. Ну, и напоследок, Вопрос №3: Как вести несколько разных проектов/программ на Go, чтобы было все удобно и по папкам? У кого-то есть tree его директории с множеством проектов?
Храните ваши проекты в $GOPATH (C:\Go\src\supertool\)
Зависимости конкретного пакета кладите в C:\Go\src\supertool\vendor
Пакеты вашего проекта кладите в папку с проектом C:\Go\src\supertool\superpackage
Собирать это всё дело потом через go build supertool
+ название пакета - одно слово, просто название именно этого пакета, название пакета не должно ничего сообщать об отношениях в иерархии
+ импорт вложенного пакета как раз таки уже знает иерархию и импортируете через import supertool/superpackage
danforth: есть еще вариант, класть все дерево исходников, относящееся к проекту в папку проекта и настроить себе систему сборки, которая прописывает при сборке GOPATH в папку с проектом.
evnuh: я добавил в переменные окружения (Windows 10) $GOPATH в другую папку, и, вроде, все работает как вы и описали. Вы меня снова спасаете, вместе с Александр Павлюк.
evnuh: т.е., допустим
supertool
package "superpackage" --> import "superpackage"
package "superpackage/awesomesubpackage" --> import "superpackage/awesomesubpackage"
и т.д..
Самый верхний пакет в иерархии проекта является корневым, а его подпакеты уже идут через слеш?
danforth:
>>"Если я хочу вести проекты в другой папке, отличной от C:\Go\src (чтобы не путаться среди остальных папок), я могу сменить GOPATH на другой путь?"
Не просто можете, а обязаны. GOPATH должна быть отличной от той директории где установлен Go. Сколько топиков в нэте с проблемами на эту тему было, до сих всплывают вопросы....жесть.