수색…


비고

Vendoring은 Go 프로젝트에서 사용하는 모든 타사 패키지가 응용 프로그램 개발자 모두에게 일관성을 유지하도록하는 방법입니다.

Go 패키지가 다른 패키지를 $GOPATH/src/ 때 컴파일러는 일반적으로 가져온 프로젝트의 경로에 대해 $GOPATH/src/ 를 확인합니다. 그러나 패키지에 vendor 라는 폴더가 있으면 컴파일러는 해당 폴더를 먼저 체크인합니다. 즉, 코드를 수정하지 않고도 자신의 코드 저장소에 다른 당사자 패키지를 가져올 수 있습니다.

Vendoring은 Go 1.6 이상의 표준 기능입니다. Go 1.5에서는 GO15VENDOREXPERIMENT=1 을 사용하려면 GO15VENDOREXPERIMENT=1 의 환경 변수를 설정해야합니다.

govendor를 사용하여 외부 패키지 추가

Govendor 는 golang의 벤더링과 호환되는 방식으로 타사 패키지를 코드 저장소로 가져 오는 데 사용되는 도구입니다.

예를 들어 타사 패키지 bosun.org/slog 사용한다고 가정 bosun.org/slog .

package main

import "bosun.org/slog"

func main() {
    slog.Infof("Hello World")
}

디렉토리 구조는 다음과 같습니다.

$GOPATH/src/
├── github.com/me/helloworld/
|   ├── hello.go 
├── bosun.org/slog/
|   ├── ... (slog files)

그러나 클론 사람 github.com/me/helloworld 가 없을 수 있습니다 $GOPATH/src/bosun.org/slog/ 자신의 빌드가 누락되어 패키지 실패하는 원인 폴더에 있습니다.

명령 프롬프트에서 다음 명령을 실행하면 Go 패키지에서 모든 외부 패키지를 가져 와서 필요한 비트를 공급 업체 폴더에 패키지화합니다.

govendor add +e

이것은 govendor에게 모든 외부 패키지를 현재 저장소에 추가하도록 지시합니다.

응용 프로그램의 디렉토리 구조는 다음과 같습니다.

$GOPATH/src/
├── github.com/me/helloworld/
|   ├── vendor/
|   |   ├── bosun.org/slog/
|   |   |   ├── ... (slog files)
|   ├── hello.go 

저장소를 복제 한 사용자는 필요한 타사 패키지도 가져옵니다.

휴지통을 사용하여 ./vendor 관리

trashvendor.conf 파일로 구성하는 최소한의 벤더링 도구입니다. 이 예제는 trash 자체를위한 것입니다.

# package
github.com/rancher/trash

github.com/Sirupsen/logrus                      v0.10.0
github.com/urfave/cli                           v1.18.0
github.com/cloudfoundry-incubator/candiedyaml   99c3df8  https://github.com/imikushin/candiedyaml.git
github.com/stretchr/testify                     v1.1.3
github.com/davecgh/go-spew                      5215b55
github.com/pmezard/go-difflib                   792786c
golang.org/x/sys                                a408501

첫 번째 비 주석 행은 우리가 관리하는 패키지입니다 ./vendor for (참고 : 이것은 루트 그대로가 아니라 프로젝트의 모든 패키지 일 수 있습니다).

주석 처리 된 행은 # 시작합니다.

비어 있지 않은 주석 행과 주석이없는 행은 각각 하나의 종속성을 나열합니다. 종속성의 "루트"패키지 만 나열되어야합니다.

패키지 이름이 버전 (커밋, 태그 또는 브랜치)과 선택적으로 패키지 리포지토리 URL (기본적으로 패키지 이름에서 추론 됨) 이후에옵니다.

당신의 ./vendor의 디렉토리를 채우려면, 당신은 할 필요가 vendor.conf 현재 디렉토리에 파일을 그냥 실행

$ trash

휴지통은 ~/.trash-cache 라이브러리를 ~/.trash-cache (기본적으로)로 복제하고, 요청한 버전을 체크 아웃하고, 파일을 ./vendor 디렉토리에 복사하고, 가져 ./vendor 않은 패키지 및 테스트 파일./vendor 합니다 . 이 마지막 단계는 ./vendor를 간결하게 유지하고 프로젝트의 공간을 절약하는 데 도움이됩니다.

v0.2.5 쓰레기의 리눅스 및 맥 OS에 사용할 수 있으며, 자식은 가장 인기있는 일이지만 우리가 다른 모든 추가에 최선을 다하고으로 만 패키지를 검색 할 자식을 지원합니다 go get 지원합니다.

golang / dep 사용

golang / dep 는 프로토 타입 종속성 관리 도구입니다. 곧 공식적인 버전 관리 도구가 될 것입니다. 현재 상태 알파 .

용법

를 통해 도구 가져 오기

$ go get -u github.com/golang/dep/...

새로운 저장소에 대한 일반적인 사용법이있을 수 있습니다.

$ dep init
$ dep ensure -update

새 버전에 대한 종속성을 업데이트하려면 다음을 실행하십시오.

$ dep ensure github.com/pkg/errors@^0.8.0

매니페스트 및 잠금 파일 형식 이 이제 완료되었습니다 . 공구가 변경 되더라도 호환성은 유지됩니다.

Govendor 도구를 사용하는 vendor.json

# It creates vendor folder and vendor.json inside it
govendor init

# Add dependencies in vendor.json
govendor fetch <dependency>

# Usage on new repository
# fetch depenencies in vendor.json
govendor sync

vendor.json의 예

{

"comment": "",
"ignore": "test",
"package": [
    {
        "checksumSHA1": "kBeNcaKk56FguvPSUCEaH6AxpRc=",
        "path": "github.com/golang/protobuf/proto",
        "revision": "2bba0603135d7d7f5cb73b2125beeda19c09f4ef",
        "revisionTime": "2017-03-31T03:19:02Z"
    },
    {
        "checksumSHA1": "1DRAxdlWzS4U0xKN/yQ/fdNN7f0=",
        "path": "github.com/syndtr/goleveldb/leveldb/errors",
        "revision": "8c81ea47d4c41a385645e133e15510fc6a2a74b4",
        "revisionTime": "2017-04-09T01:48:31Z"
    }
],
"rootPath": "github.com/sample"

}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow