Go는 타사 패키지를 어떻게 업데이트합니까?


189

golang 패키지가 얼마나 활발하게 성장하고 향상되는지 살펴보면 패키지 버전의 문제가 어떻게 해결되는지 궁금합니다.

한 가지 방법은 타사 패키지를 프로젝트 폴더에 저장하는 것입니다.

하지만 함께 설치하면 go get어떻게 되나요?

답변:


309

go get에 나열된 첫 번째 디렉토리 GOPATH(콜론으로 구분 된 디렉토리 목록을 포함 할 수있는 환경 변수)에 패키지를 설치합니다 . go get -u기존 패키지를 업데이트하는 데 사용할 수 있습니다 .

당신은 또한 당신의 go get -u all모든 패키지를 업데이트 하는 데 사용할 수 있습니다GOPATH

더 큰 프로젝트의 경우 프로젝트 A에서 라이브러리를 업데이트해도 프로젝트 B에서 문제가 발생하지 않도록 각 프로젝트마다 다른 GOPATH를 작성하는 것이 합리적 일 수 있습니다.

환경 변수 go help gopath에 대한 자세한 내용을 보려면 입력 GOPATH하십시오.


2
번들 업데이트와 같은 모든 패키지를 최신 버전으로 업데이트 할 수 있습니까?
chourobin

73
단지해야 go get -u all 부활 미안하지만, 단지 경우 다른 사람에서 찾고 있었다.
Dan Anderson

go get -u all더 이상 작동하지 않습니다! 적어도 Go 1.13의 경우 GOPATH에서이 명령을 실행하면 경고가 반환됩니다.`warning "all"match no no packages "
Contrapak

Go 1.12.9와 함께 작동
fviktor

61

@tux 대답은 중대하다, 당신이 사용할 수있는 추가하고 싶었 가서 특정 패키지를 업데이트 :

go get -u full_package_name

18

질문 에 타사 라이브러리가 언급 되었지만 모든 패키지는 언급 되지 않았으므로 와일드 카드를 사용하는 것이 좋습니다.

유스 케이스 : Github VCS에서 얻은 모든 패키지를 업데이트하고 싶다면 다음과 같이 말하십시오.

go get -u github.com/... // ('...' being the wildcard). 

이것은 현재의 github 패키지 만 업데이트합니다. $GOPATH

VCS 내에서도 동일하게 적용됩니다. ogranizaiton A의 저장소에서 모든 패키지를 업그레이드하려는 경우에만 의존합니다.

go get -u github.com/orgA/...

11

위의 답변에는 다음과 같은 문제가 있습니다.

  1. 커밋되지 않은 변경 사항이있는 경우 앱을 포함한 모든 것을 업데이트합니다.
  2. 프로젝트에서 이미 제거했지만 디스크에 이미있는 패키지를 업데이트했습니다.

이를 피하려면 다음을 수행하십시오.

  1. 업데이트하려는 타사 폴더를 삭제하십시오.
  2. 앱 폴더로 이동하여 실행 go get -d

2

1.13으로 가다

(모듈 루트 디렉토리에서 실행)

지정된 종속성을 업데이트하십시오.

go get -u <package-name>

모든 직접 및 간접 종속성을 최신 마이너 또는 패치 업그레이드로 업데이트하십시오 (시험판은 무시 됨).

go get -u ./...
# or
go get -u=patch ./...

참고:

https://github.com/golang/go/wiki/Modules#daily-workflow

go help get



-2

경로로 이동하여 입력

go get -u ./..

모든 필수 패키지를 업데이트합니다.


이 문자 그대로의 해석은 작동하지 않습니다. 더 많은 맥락이 도움이 될 것입니다.
Contrapak

2
나는 그가 의미 믿는다 go get -u ./...(3 점)
브라이언 Leishman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.