[go] go get을 사용하여 특정 버전의 패키지를 가져 오려면 어떻게해야합니까?

Node특정 버전의 공급 업체 lib를 프로젝트 폴더 ( node_modules)에 설치하는 데 사용 했던 환경 에서 다음과 같이 npm해당 lib의 해당 버전을 package.json콘솔에서 또는 콘솔에서 직접 설치하도록 지시합니다 .

$ npm install express@4.0.0

그런 다음 프로젝트에서 해당 패키지의 해당 버전을 다음과 같이 가져 왔습니다.

var express = require('express');

이제 go. 어떻게 할 수 있습니까? 특정 버전의 패키지를 설치할 수 있습니까? 그렇다면 중앙 집중식을 사용하여 $GOPATH다른 버전 대신 한 버전을 가져올 수 있습니까?

나는 다음과 같이 할 것입니다.

$ go get github.com/wilk/uuid@0.0.1
$ go get github.com/wilk/uuid@0.0.2

하지만 가져 오는 동안 어떻게 차이를 만들 수 있습니까?



답변

Go 1.11에는 go 모듈이라는 기능이 있으며 버전에 종속성을 추가하기 만하면됩니다. 다음과 같이하세요:

go mod init .
go mod edit -require github.com/wilk/uuid@0.0.1`
go get -v -t ./...
go build
go install 

해당 주제에 대한 자세한 정보는 다음과 같습니다. https://github.com/golang/go/wiki/Modules


답변

아무도 gopkg.in 을 언급하지 않았다는 사실에 놀랐습니다 .

gopkg.in실제로 저장소를 만들지 않고도 버전을 저장소 URL로 표현할 수있는 래퍼 (리디렉션)를 제공하는 서비스입니다. 예 gopkg.in/yaml.v1gopkg.in/yaml.v2, 심지어 모두 라이브 그들은 비록https://github.com/go-yaml/yaml

저자가 적절한 버전 관리 관행을 따르지 않는 경우 (이전 버전과의 호환성을 깨뜨릴 때 버전 번호를 늘림) 완벽하지 않지만 브랜치 및 태그와 함께 작동합니다.


답변

을 사용 git checkout하여 특정 버전을 얻고이 버전을 사용하여 프로그램을 빌드 할 수 있습니다.

예:

export GOPATH=~/
go get github.com/whateveruser/whateverrepo
cd ~/src/github.com/whateveruser/whateverrepo
git tag -l
# supose tag v0.0.2 is correct version
git checkout tags/v0.0.2
go run whateverpackage/main.go


답변

Glide 는 특히 Node의 npm 또는 Rust의화물에서 온 경우 Go를위한 정말 우아한 패키지 관리입니다.

1.6에서 Godep의 새로운 공급 업체 기능과 밀접하게 작동하지만 훨씬 더 쉽습니다. 종속성 및 버전은 GOPATH에 의존하지 않고 projectdir / vendor 디렉터리 내에 “잠 깁니다”.

Brew로 설치 (OS X)

$ brew install glide

glide.yaml 파일을 초기화합니다 (package.json과 유사). 또한 GOPATH에서 프로젝트의 기존 가져온 패키지를 가져 와서 프로젝트의 vendor / 디렉토리에 복사합니다.

$ glide init

새 패키지 받기

$ glide get vcs/namespace/package

패키지 버전을 업데이트하고 잠급니다. 그러면 프로젝트 디렉토리에 glide.lock 파일이 생성되어 버전을 잠급니다.

$ glide up

글라이드를 시도했고 현재 프로젝트에서 즐겁게 사용하고 있습니다.


답변

업데이트 18-11-23 : Go 1.11 모드에서 공식 실험입니다. @krish 답변을 참조하십시오.
19-01-01 업데이트 : Go 1.12 모드는 여전히 공식 실험입니다. Go 1.13부터는 모듈 모드가 모든 개발의 기본값이됩니다.
업데이트 19-10-17 : Go 1.13 mod는 공식 패키지 관리자입니다.

https://blog.golang.org/using-go-modules

이전 답변 :

당신은 offical 한으로 버전을 설정할 수 있습니다 출발

dep ensure --add github.com/gorilla/websocket@1.2.0


답변

Go 1.5에는 종속성을 관리하는 데 도움이 되는 “공급 업체 실험” 이 있습니다. Go 1.6부터는 더 이상 실험이 아닙니다. Go wiki에는 다른 옵션있습니다. .

편집 : 이 답변 에서 언급했듯이 gopkg.in 은 1.5 이전의 github-depdencies를 고정하는 데 좋은 옵션입니다.


답변

depGo 언어의 종속성 관리를위한 공식 실험입니다. 컴파일하려면 Go 1.8 이상이 필요합니다.

를 사용하여 종속성 관리를 시작하려면 dep프로젝트의 루트 디렉터리에서 다음 명령어를 실행하세요.

dep init

실행 후 두 개의 파일 Gopkg.toml( “manifest”) 이 생성 Gopkg.lock되고 필요한 패키지가 vendor디렉토리 로 다운로드됩니다 .

github.com/gorilla/websocketpackage 를 사용하는 프로젝트가 있다고 가정 해 보겠습니다 . dep다음 파일을 생성합니다.

Gopkg.toml

# Gopkg.toml example
#
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
# for detailed Gopkg.toml documentation.
#
# required = ["github.com/user/thing/cmd/thing"]
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
#
# [[constraint]]
#   name = "github.com/user/project"
#   version = "1.0.0"
#
# [[constraint]]
#   name = "github.com/user/project2"
#   branch = "dev"
#   source = "github.com/myfork/project2"
#
# [[override]]
#  name = "github.com/x/y"
#  version = "2.4.0"


[[constraint]]
  name = "github.com/gorilla/websocket"
  version = "1.2.0"

Gopkg.lock

# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.


[[projects]]
  name = "github.com/gorilla/websocket"
  packages = ["."]
  revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b"
  version = "v1.2.0"

[solve-meta]
  analyzer-name = "dep"
  analyzer-version = 1
  inputs-digest = "941e8dbe52e16e8a7dff4068b7ba53ae69a5748b29fbf2bcb5df3a063ac52261"
  solver-name = "gps-cdcl"
  solver-version = 1

패키지를 업데이트 / 삭제 / 삭제하는 데 도움이되는 명령이 있습니다 . (Go 용 종속성 관리 도구) 의 공식 github 저장소 에서 자세한 정보를 찾으십시오 dep.