>

우리는 dep 에서 내부 코드베이스를 변환하고 있습니다  모듈을 이동하는 종속성 관리자 ( vgo  또는 go1.11.2에 내장). 다음과 같은 코드가 있다고 상상해보십시오.

$GOPATH/src/mycompany/myprogram/main.go :

package main
import (
        "fmt"
        lib "mycompany/mylib" )
func main() {
        fmt.Println("2+3=", lib.add(2, 3)) 
}

$GOPATH/src/mycompany/myprogram/go.mod :

module mycompany/myprogram

(종속성이 없으며 실제 코드는 존재하지 않습니다)

$GOPATH/src/mycompany/mylib/lib.go :

package mylib
func Add(x int, y int) int {
        return x + y
}

이 코드를 모듈화하지 않았습니다. 내가하든 않든 상관 없습니다.

이것은 사소한 예제이지만 내부 코드는 역사적으로 작동하는 것과 유사한 구조를 따릅니다.

이 디렉토리는 Gopath에 있기 때문에 export GO111MODULE=auto  여전히 이전과 같이 빌드되며 정상적으로 작동합니다 (우리가 gopath에 있기 때문에 사용되지 않는 모듈). 그러나 export GO111MODULE=on 를 설정하면  즉시 오류가 발생합니다 :

build mycompany/myprogram: cannot find module for path mycompany/mylib

따라서 연구를 해왔으며 이해를 확인하고 싶습니다. 먼저 이전의 접근 방식이 효과가 있다고 말하지만 go 프로젝트 자체가 향하는 곳에서 go 모듈을 사용하도록 변경하는 데 더 관심이 있습니다. 그래서

<올>
  • golang 저자의 의도는 "dotless"경로가 표준 저장소에만 속한다는 것입니다. 즉, 도메인 이름과 프로젝트 사이에 바인딩이 있어야합니다. 우리는 당연히 내부 프로젝트에 착수하지 않습니다. 원본은 다음과 같습니다 :

    Dotless paths in general are reserved for the standard library; go get has (to my knowledge) never worked with them, but go get is also the main entry point for working with versioned modules.

    고랑에 대해 더 많은 지식을 가진 사람이 이것을 확인할 수 있습니까?

  • 내 주요 가정은 일단 모듈을 사용하기로 결정하면모든종속성이 모듈이어야하며 캐시가 아닌 경우 gopath가 다소 관련이 없어진다는 것입니다. 다운로드 한 모듈). 이것이 맞습니까?

  • 이 경우, 경로에 전용 gitlab (이 경우) 저장소를 사용해야합니다. 알고있는 문제를 처리하는 데 공개적인 문제가있어 필요한. 개인 저장소를 반복하여 결과에 더 관심이 있습니다. 이전에는 변경 사항을 커밋하기 전에 이러한 라이브러리를 로컬로 개발할 수있었습니다. 이제 선택의 여지가있는 것 같습니다 :

    <올>
  • 이 원격 종속성을 수락하고 반복하십시오. 나는 이런 식으로 원격으로 밀고 당기는 것을 피하고 싶었습니다. 꼭 필요한 경우 인터넷 연결이 필요한 해결 방법이 있습니다.
  • 모든 것을 하나의 큰 자식 저장소로 병합하십시오.
  • 중요하다면 go version go1.11.2 linux/amd64 를 사용하고 있습니다  제 동료들은 darwin/amd64 를 사용하고 있습니다 . 도움이된다면 내 golang은 Fedora의 저장소에 의해 설치된 것과 정확히 동일합니다.

    그래, tl;dr 내 질문은 모듈 시스템을 사용하여 종속성을 해결해야하고 gopath가 중복되었다는 점에서 go 모듈이 아님 또는 아무것도 아닙니까? 아니면 이것이 실패하도록 유발할 수있는 설정에 대한 것이 있습니까? gopath에서 종속성을 명시 적으로 해결해야 함을 나타내는 방법이 있습니까?

    질문을 한 이후 업데이트:

    <올>
  • myprogram 를 움직일 수 있습니다  gopath에서. 같은 문제가 발생합니다 ( mylib  gopath에 남아 있습니다).
  • go mod init mycompany/mylib 를 실행할 수 있거나 실행할 수 없습니다  mylib 디렉토리에서;전혀 차이가 없습니다.
  • 저는 vgo에서 Russ Cox의 블로그 게시물 을 발견했습니다. 너무 멀리 뛰어 들지 않으려 고 노력한 오프라인 개발에 대한 나의 관심사는 $GOPROXY 에 의해 해결되었습니다. .

    • 답변 # 1

      GITHUB_TOKEN 에 대한 해결 방법을 사용합니다  이것을 해결하기 위해.

      <올>

      와이즈 비즈 생성  여기 https://github.com/settings/tokens

      GITHUB_TOKEN

      export GITHUB_TOKEN=xxx

    • 답변 # 2

      중간 : 개인 Git 리포지토리가있는 Go 모듈에 대한 솔루션을 작성했습니다.

      우리가 처리하는 방식은 기본적으로 Alex Pliutau의 위의 답변과 동일하며 블로그는 GitHub/GitLab/BitBucket의 토큰으로 git 구성을 설정하는 방법에 대한 예제를 통해 자세히 설명합니다.

      GitLab 관련 비트 :

      git config --global url."https://${GITHUB_TOKEN}:x-oauth-basic@github.com/mycompany".insteadOf "https://github.com/mycompany"
      
      

      도움이 되길 바랍니다.

      git config --global \ url."https://oauth2:${personal_access_token}@privategitlab.com".insteadOf \ "https://privategitlab.com" #or git config --global \ url."https://${user}:${personal_access_token}@privategitlab.com".insteadOf \ "https://privategitlab.com"

  • 이전 Elasticsearch 다중 용어 필터
  • 다음 permissions - `zshrc`를 다시로드하는 데 권장되는 방법은 무엇입니까? (`source` VS`exec`?)