Go, go get, go install, локальные пакеты и контроль версий

У меня возникли проблемы с пониманием рабочего процесса создания проекта go с локальными пакетами.

Скажем, я создаю новый проект, используя git для управления версиями, в котором есть файл main.go и файл tools.go, которые будут в package utils. Итак, у меня есть такая структура каталогов:

/myproject/
   main.go
   utils/
     tools.go

main.go выглядит так:

package main
import "./utils"
func main() {
    utils.DoSomthing()
}

и tools.go выглядит так:

package utils;
func DoSomething() {
}

Все отлично работает локально, используя go buildи беги. Но это размещается на github, и я хотел бы, чтобы другие использовали команду go getдля его установки. Таким образом, импорт локального пакета необходимо изменить, чтобы использовать формат «github.com/user/project/utils», который работает, за исключением того, что теперь у меня есть две копии исходного кода, и реальная проблема заключается в том, что копия с историей git имеет импорт, который использует загруженную копию. Поэтому, если я работаю над копией с историей git, любые изменения, внесенные в tools.go, останутся незамеченными, потому что будет использоваться загруженная копия.

Поэтому мне интересно, может ли кто-нибудь объяснить правильный способ использования go get, контроля версий и импорта пакетов в рамках одного проекта.

58
задан Seth Hoenig 12 April 2012 в 19:23
поделиться