수색…
비고
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 관리
trash
은 vendor.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"
}