2016-06-24 5 views
0

Итак, у меня возникла проблема со всем рабочим пространством Go и моей собственной организацией персонального кода. Поэтому я понимаю, как предполагается, что рабочее пространство должно быть настроено с помощью src, pkg и bin в одной общей папке gocode.Как фрагментировать рабочую область Go

Однако это не очень хорошо интегрируется с моим рабочим процессом. В моей папке кода у меня есть две другие папки: «Работа и личная». Работа, конечно же, - это папка, в которой содержатся все проекты, над которыми я работаю, для своей работы, а личные - для личных проектов или веселого тестирования. В обеих папках у меня есть проекты Go, а также проекты JavaScript, python и HTML. Я действительно не хочу перекрещивать Работу и Личную вместе в той же папке Go, потому что я хотел бы записывать в Работу и видеть все мои проекты (либо для справки, либо для облегчения доступа), и то же самое с Личным. Я не хочу переключаться между одной папкой, заполненной столкновением кода Work and Personal Go, а затем другой рабочей папкой с множеством Javascript.

Но когда я организовываю свои проекты, как я объяснял, я по существу разбиваю всю функциональность GOPATH, которая по очереди смешивается с операциями импорта и т. Д. Так или иначе, я могу продолжать организовывать свои проекты так, как они есть, и трюк. что все они находятся в центральной папке Go/src? Я считаю, что могу что-то делать с символическими ссылками, поскольку я нахожусь на Mac o x, но я не знаю, работает ли это или нет. Любой разработчик решает эту проблему в своей компании? Благодаря!

+2

Вы можете использовать Symlinks _to_ каталоги в GOPATH, просто убедитесь, что у вас нет символические ссылки внутри вашего GOPATH. Помимо этого, борьба с инструментами Go только вызовет больше проблем, чем его ценность. – JimB

+1

да, поместите все в свой гопат, затем 'ln -s $ GOPATH/src/github.com/foots/project ~/Work/project' – Plato

+0

@JimB Хорошо, поэтому позвольте мне посмотреть, правильно ли я это понимаю, я немного новый для Unix. Вместо того, чтобы поместить мой код в '~/Code/Work/MyProject', я бы поместил свой код в' ~/gocode/src/MyProject'? Затем, если я привязываю код к своему пользовательскому рабочему пространству, когда я 'cd' в свое пользовательское рабочее пространство, он автоматически перенаправляет терминал в GOPATH? –

ответ

1

https://dmitri.shuralyov.com/blog/18

Это списки блога, как вы можете настроить несколько путей в вашей $GOPATH переменной, чтобы позволить вам делать то, что вы хотите. Идея состоит в том, что у вас есть какое-то рабочее пространство по умолчанию (в котором будут размещены все ваши пакеты go get), а затем любые дополнительные рабочие пространства, которые у вас есть, могут следовать за рабочим пространством по умолчанию в переменной среды (разделенные двоеточиями на основе unix). Инструмент Go специально разработан для обработки этого прецедента и проверяет каждый путь в вашем $GOPATH, чтобы для зависимостей использовалась первая версия этой зависимости, которую он обнаружил.

Единственная важная вещь, о которой вам следует знать, если вы это сделаете, это то, что вы больше не можете использовать $GOPATH в качестве фактической строки пути (сначала вам нужно разбить ее). Некоторые пакеты Go могут не справиться с этой настройкой. Однако, если вы когда-нибудь понадобится, чтобы найти файл в любом из путей в вашей $GOPATH себя, эта функция будет делать так:

func FindInGoPath(filePath string) (string, error) { 
    pathList := strings.Split(os.ExpandEnv("${GOPATH}"), string(os.PathListSeparator)) 

    if strings.TrimSpace(pathList) == "" { 
     return "", errors.New("$GOPATH environment variable is empty/not set") 
    } 

    for _, path := range pathList { 
     if !strings.HasSuffix(path, string(os.PathSeparator)) { 
      path += string(os.PathSeparator) 
     } 
     if _, err := os.Stat(path + filePath); err == nil { 
      return path + filePath, nil 
     } 
    } 
    return "", errors.New("file not found") 
} 
Смежные вопросы