2016-06-24 1 views
0

J'ai donc rencontré un problème avec l'ensemble de l'espace de travail Go et ma propre organisation de code personnel. Donc, je comprends comment l'espace de travail est supposé être configuré avec src, pkg et bin, sous un seul et même dossier gocode.Comment fragmenter l'espace de travail Go

Cependant, cela ne s'intègre pas vraiment bien avec mon flux de travail. Dans mon dossier de code, j'ai deux autres dossiers: Travail et personnel. Le travail est bien sûr le dossier qui contient tous les projets sur lesquels je travaille pour mon travail, et personnel est pour des projets personnels ou des tests amusants. Dans les deux dossiers, j'ai des projets Go, ainsi que des projets JavaScript, python et HTML. Je ne veux pas vraiment croiser Travail et Personnel ensemble dans le même dossier Aller parce que je voudrais cd dans le travail et voir tous mes projets (soit pour la référence ou la facilité d'accès) et même avec personnel. Je ne veux pas basculer entre un dossier rempli de code Work et Personal Go, puis un autre dossier Work avec beaucoup de Javascript. Mais quand j'organise mes projets comme je l'ai expliqué, je casse la totalité de la fonctionnalité GOPATH qui à son tour gâche les instructions d'importation, etc. Donc, est-ce que je peux continuer à organiser mes projets comme ils le sont? qu'ils sont tous dans un dossier central Go/src? Je crois que je pourrais faire quelque chose avec des liens symboliques comme je suis sur Mac o x mais je ne sais pas si cela fonctionne ou non. Tout développeur résout ce problème dans leur propre entreprise? Merci!

+2

Vous pouvez utiliser les répertoires de liens symboliques dans votre GOPATH, assurez-vous que vous n'avez pas liens symboliques à l'intérieur de votre GOPATH. À part ça, se battre contre les outils Go ne va que causer plus de problèmes que de valeur. – JimB

+1

ouais, mettez tout dans votre gopathe, puis 'ln -s $ GOPATH/src/github.com/foots/projet ~/Work/project' – Plato

+0

@JimB OK, alors laissez-moi voir si je comprends bien, je suis légèrement nouveau sur Unix. Au lieu de mettre mon code dans '~/Code/Work/MyProject', je mettrais mon code dans' ~/gocode/src/MyProject'? Puis, si je crée un lien symbolique avec le code de mon espace de travail personnalisé, lorsque je couterai dans mon espace de travail personnalisé, le terminal sera automatiquement redirigé vers le GOPATH. –

Répondre

1

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

que les listes de blog comment vous pouvez configurer plusieurs chemins d'accès dans votre variable $GOPATH pour vous permettre de faire ce que vous voulez. L'idée est que vous avez un espace de travail par défaut (où tous vos paquets go get seront placés), puis tous les espaces de travail supplémentaires que vous avez peuvent suivre cet espace de travail par défaut dans la variable d'environnement (séparés par deux points sur unix). L'outil Go est spécialement conçu pour gérer ce cas d'utilisation et vérifie chaque chemin dans votre $GOPATH, dans l'ordre, pour les dépendances, en utilisant la première version de cette dépendance qu'il trouve. La seule chose importante dont vous devez être conscient si vous faites cela est que vous ne pouvez plus utiliser $GOPATH comme une chaîne de chemin réelle (vous devez d'abord le diviser). Certains paquets Go peuvent ne pas être en mesure de gérer cette configuration. Cependant, si vous avez besoin de trouver un fichier dans l'un des chemins dans votre vous $GOPATH, cette fonction fera:

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") 
}