언어의 변화의 버전 의존성 관리를 이동하는 것은 점차 완성된다.
종속성 관리
왜 관리에 의존
처음, 모든 타사 라이브러리를 사용하여 이동 GOPATH이 디렉토리에 배치됩니다. 이 코드의 한 버전을 저장할 수있는 동일한 라이브러리에 연결됩니다. 다른 프로젝트의 다른 버전으로 타사 라이브러리에 의존하는 경우 어떻게 해결?
godep
처음 소개하기 시작에서 V1.5 언어를 이동 vendor
공급 업체 디렉토리는 프로젝트 디렉토리 아래에있는 경우 다음의 사용에 우선 순위를 부여합니다 툴 체인을 이동, 모드 vendor
등 테스트하고, 컴파일의 패키지로 제공된다.
godep
이동 언어는 지역 사회뿐만 아니라 벤더 모드에 의해 구현 유사한 준 공식 패키지 관리 도구에 의해 유지되는 타사 의존성 관리 도구입니다 dep
.
설치
설치하려면 다음 명령을 실행 godep
도구.
go get github.com/tools/godep
기본 명령
godep 설치 한 후, 터미널에 입력 godep
지원하는 모든 명령을 확인합니다.
godep save 将依赖项输出并复制到Godeps.json文件中
godep go 使用保存的依赖项运行go工具
godep get 下载并安装具有指定依赖项的包
godep path 打印依赖的GOPATH路径
godep restore 在GOPATH中拉取依赖的版本
godep update 更新选定的包或go版本
godep diff 显示当前和以前保存的依赖项集之间的差异
godep version 查看版本信息
사용은 godep help [command]
특정 명령의 도움말 정보를 볼 수 있습니다.
godep 사용
프로젝트 디렉토리의 구현에서 godep save
명령을 현재 프로젝트에 생성 Godeps
하고 vender
두 개의 폴더.
것을 특징으로 Godeps
폴더가이 Godeps.json
패킷 정보 항목을 기록하는 파일을 따라 달라집니다. vender
폴더 소스 코드 파일 패키지에 의존하는 프로젝트입니다.
벤더 메커니즘
Go1.5 버전을 지원하기 시작했다 후, 이동 언어 컴파일러 프로그램은 패킷 우선 순위 검색 경로에 따라 달라집니다 제어 할 수 있습니다.
예를 들어, 프로젝트의 루트 디렉토리에있을 것입니다 첫 번째 프로젝트 찾을 종속성 vender
찾기 위해 파일 폴더를 찾을 수없는 경우가로 이동합니다 $GOAPTH/src
디렉토리를 찾을 수 있습니다.
godep 개발 과정
- 보증 절차는 정상를 컴파일
- 실행은
godep save
모든 제 3 자 정보 및 코드에 의존 버전의 현재 프로젝트를 저장하려면 - Godeps 디렉토리 및 벤더 코드베이스 디렉토리 제출.
- 당신이 의존 버전을 업데이트하려는 경우, 당신은 직접 수정할 수있는
Godeps.json
파일의 해당 항목을
모듈을 이동
go module
Go1.11 버전 이후 버전 관리 도구의 공식 출시하고, Go1.13 버전에서 go module
기본 언어로 이동 종속성 관리 도구가 될 것입니다.
GO111MODULE
사용하려면 go module
먼저 환경 변수를 설정해야합니다 지원 GO111MODULE
: 모듈 지원을 통해 켜거나 끌 수 있습니다, 그것은 세 가지 값이 off
,, on
, auto
기본값입니다 auto
.
GO111MODULE=off
모듈 지원을 해제, 그것은 컴파일시에서 될 것입니다GOPATH
및vendor
패키지 폴더를 찾을 수 있습니다.GO111MODULE=on
컴파일 할 때 무시 모듈 지원 활성화GOPATH
및vendor
단지 기반 폴더go.mod
종속성을 다운로드합니다.GO111MODULE=auto
프로젝트의 경우$GOPATH/src
프로젝트 루트 디렉토리 외부go.mod
파일을 열고 모듈을 지원합니다.
간단히 말해, 설정 GO111MODULE=on
당신이 사용할 수있는 후 go module
, 거기에 GOPATH에서 프로젝트를 만들 필요가 없으며, 또한 잘 관리 할 수 있기 때문에이 프로젝트는 타사 패키지 정보를 따라 달라집니다.
이동 모듈 관리를 사용하면 의존하는 프로젝트의 루트 디렉토리에 두 개의 파일 생성 go.mod
및 go.sum
.
GOPROXY
Go1.11는 GOPROXY 명령을 한 후 설정 :
export GOPROXY=https://goproxy.cn
Go1.13 후 GOPROXY
기본값 https://proxy.golang.org
나라에서 액세스 할 수없는, 내가 사용하는 것이 좋습니다, 당신은 GOPROXY을 설정하는 것이 좋습니다 goproxy.cn을 .
go env -w GOPROXY=https://goproxy.cn,direct
모드 명령을 이동
일반적으로 사용되는 go mod
다음과 같은 명령은 다음과 같습니다
go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit 编辑go.mod文件
go mod graph 打印模块依赖图
go mod init 初始化当前文件夹, 创建go.mod文件
go mod tidy 增加缺少的module,删除无用的module
go mod vendor 将依赖复制到vendor下
go mod verify 校验依赖
go mod why 解释为什么需要依赖
<h3 id="go-mod">go.mod</h3> <p>go.mod文件记录了项目所有的依赖信息,其结构大致如下:</p> <pre><code class="language-sh">module github.com/Q1mi/studygo/blogger go 1.12 require ( github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586 github.com/gin-gonic/gin v1.4.0 github.com/go-sql-driver/mysql v1.4.1 github.com/jmoiron/sqlx v1.2.0 github.com/satori/go.uuid v1.2.0 google.golang.org/appengine v1.6.1 // indirect )
其中,
module
用来定义包名require
用来定义依赖包及版本indirect
表示间接引用依赖的版本
go mod支持语义化版本号,比如
go get [email protected]
,也可以跟git的分支或tag,比如go get foo@master
,当然也可以跟git提交哈希,比如go get foo@e3702bed2
。关于依赖的版本支持以下几种格式:gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 gopkg.in/vmihailenco/msgpack.v2 v2.9.1 gopkg.in/yaml.v2 <=v2.2.1 github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e latest
replace
在国内访问golang.org/x的各个包都需要翻墙,你可以在go.mod中使用replace替换成github上对应的库。
replace ( golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0 )
go get
在项目中执行
go get
命令可以下载依赖包,并且还可以指定下载的版本。
- 运行
go get -u
将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)- 运行
go get -u=patch
将会升级到最新的修订版本- 运行
go get package@version
将会升级到指定的版本号version如果下载所有依赖可以使用
go mod download
命令。整理依赖
我们在代码中删除依赖代码后,相关的依赖库并不会在
go.mod
文件中自动移除。这种情况下我们可以使用go mod tidy
命令更新go.mod
中的依赖关系。go mod edit
格式化
因为我们可以手动修改go.mod文件,所以有些时候需要格式化该文件。Go提供了一下命令:
go mod edit -fmt
添加依赖项
go mod edit -require=golang.org/x/text
移除依赖项
如果只是想修改
go.mod
文件中的内容,那么可以运行go mod edit -droprequire=package path
,比如要在go.mod
中移除golang.org/x/text
包,可以使用如下命令:go mod edit -droprequire=golang.org/x/text
关于
go mod edit
的更多用法可以通过go help mod edit
查看。在项目中使用go module
既有项目
如果需要对一个已经存在的项目启用
go module
,可以按照以下步骤操作:
- 在项目目录下执行
go mod init
,生成一个go.mod
文件。- 执行
go get
,查找并记录当前项目的依赖,同时生成一个go.sum
记录每个依赖库的版本和哈希值。新项目
对于一个新创建的项目,我们可以在项目文件夹下按照以下步骤操作:
- 执行
go mod init 项目名
命令,在当前项目文件夹下创建一个go.mod
文件。- 手动编辑
go.mod
中的require依赖项或执行go get
自动发现、维护依赖。