이동 모듈 의존성 관리 및 사용을 이동

언어의 변화의 버전 의존성 관리를 이동하는 것은 점차 완성된다.

종속성 관리

왜 관리에 의존

처음, 모든 타사 라이브러리를 사용하여 이동 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 개발 과정

  1. 보증 절차는 정상를 컴파일
  2. 실행은 godep save모든 제 3 자 정보 및 코드에 의존 버전의 현재 프로젝트를 저장하려면
  3. Godeps 디렉토리 및 벤더 코드베이스 디렉토리 제출.
  4. 당신이 의존 버전을 업데이트하려는 경우, 당신은 직접 수정할 수있는 Godeps.json파일의 해당 항목을

모듈을 이동

go moduleGo1.11 버전 이후 버전 관리 도구의 공식 출시하고, Go1.13 버전에서 go module기본 언어로 이동 종속성 관리 도구가 될 것입니다.

GO111MODULE

사용하려면 go module먼저 환경 변수를 설정해야합니다 지원 GO111MODULE: 모듈 지원을 통해 켜거나 끌 수 있습니다, 그것은 세 가지 값이 off,, on, auto기본값입니다 auto.

  1. GO111MODULE=off모듈 지원을 해제, 그것은 컴파일시에서 될 것입니다 GOPATHvendor패키지 폴더를 찾을 수 있습니다.
  2. GO111MODULE=on컴파일 할 때 무시 모듈 지원 활성화 GOPATHvendor단지 기반 폴더 go.mod종속성을 다운로드합니다.
  3. GO111MODULE=auto프로젝트의 경우 $GOPATH/src프로젝트 루트 디렉토리 외부 go.mod파일을 열고 모듈을 지원합니다.

간단히 말해, 설정 GO111MODULE=on당신이 사용할 수있는 후 go module, 거기에 GOPATH에서 프로젝트를 만들 필요가 없으며, 또한 잘 관리 할 수 있기 때문에이 프로젝트는 타사 패키지 정보를 따라 달라집니다.

이동 모듈 관리를 사용하면 의존하는 프로젝트의 루트 디렉토리에 두 개의 파일 생성 go.modgo.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 &lt;=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 =&gt; github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
    golang.org/x/net v0.0.0-20180821023952-922f4815f713 =&gt; github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
    golang.org/x/text v0.3.0 =&gt; github.com/golang/text v0.3.0
)

go get

在项目中执行go get命令可以下载依赖包,并且还可以指定下载的版本。

  1. 运行go get -u将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
  2. 运行go get -u=patch将会升级到最新的修订版本
  3. 运行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,可以按照以下步骤操作:

  1. 在项目目录下执行go mod init,生成一个go.mod文件。
  2. 执行go get,查找并记录当前项目的依赖,同时生成一个go.sum记录每个依赖库的版本和哈希值。

新项目

对于一个新创建的项目,我们可以在项目文件夹下按照以下步骤操作:

  1. 执行go mod init 项目名命令,在当前项目文件夹下创建一个go.mod文件。
  2. 手动编辑go.mod中的require依赖项或执行go get自动发现、维护依赖。

추천

출처www.cnblogs.com/nickchen121/p/11517437.html