2016-06-24 16 views
0

그래서 전체 Go 작업 영역 및 자체 개인 코드 조직과 관련하여 문제가 발생했습니다. 그래서 저는 작업 공간이 src, pkg, bin으로 하나의 포괄적 인 gocode 폴더 아래에 설정되어야한다고 생각합니다.Go 작업 영역 조각화 방법

그러나 이는 실제로 내 워크 플로와 잘 통합되지 않습니다. 내 코드 폴더에는 작업 폴더와 개인 폴더가 있습니다. 물론 일은 내가 일하는 모든 프로젝트가 들어있는 폴더이며, 개인은 개인적인 측면 프로젝트 또는 재미있는 테스트를위한 것입니다. 두 폴더 모두에서 Go 프로젝트와 JavaScript, Python 및 HTML 프로젝트가 있습니다. 필자는 Work 폴더와 동일한 Go 폴더에서 Work와 Personal을 함께 사용하고 싶지 않습니다. 왜냐하면 저는 CD로 작업하고 모든 프로젝트 (참조 용 또는 액세스 용이성 용) 및 개인용 프로젝트를보고 싶기 때문입니다. Work와 Personal Go 코드의 충돌로 채워진 한 폴더와 Javascript가 많은 다른 Work 폴더 사이를 전환하고 싶지 않습니다.

그러나 설명 할 때 프로젝트를 구성 할 때 본질적으로 전체 GOPATH 기능이 손상되어 가져 오기 명령문 등이 뒤죽박죽이됩니다. 어쨌든 계속 프로젝트 프로젝트를 구성하고 속임수로 사용할 수 있습니다. 그것들은 모두 중앙 Go/src 폴더에 있습니까? Mac OS X에서 심볼릭 링크를 사용하여 작업을 수행 할 수 있다고 생각하지만 작동하는지 여부는 알 수 없습니다. 모든 개발자가 자신의 회사에서이 문제를 해결합니까? 감사!

+2

, 당신이하지 않아도 확인 GOPATH 내부의 심볼릭 링크. 그 외의 경우, Go 도구와의 전투는 그 가치보다 더 많은 문제를 일으킬 것입니다. – JimB

+1

예, 당신의 고파스에 모든 것을 넣은 다음,'''-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 기반의 경우 콜론 분리)에서 기본 작업 공간을 따라갈 수 있다는 아이디어가 있습니다. 이동 도구는이 사용 사례를 처리하도록 특별히 설계되었으며 발견 한 종속성의 첫 번째 버전을 사용하여 종속성에 대해 차례로 $GOPATH의 각 경로를 검사합니다.

이 작업을 수행 할 때주의해야 할 중요한 사항은 더 이상 실제 경로 문자열로 $GOPATH을 사용할 수 없다는 것입니다 (먼저 분리해야 함). 일부 이동 패키지는이 설정을 처리하지 못할 수 있습니다. 그러나 지금까지의 모든 경로에서 파일을 찾을 필요가 경우 $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") 
} 
당신은 당신의 GOPATH에 심볼릭 링크 _to_ 디렉토리를 사용할 수 있습니다