[go]go依赖包管理

go的包管理工具godep和dep

包的基础及发展

godep从go 1.0开始就可以使用了,是比较老的包管理工具,早期使用go的人应该都用过godep.
dep是2017年初才发布的包管理工具,要求go >= 1.7.

// 什么是包?

1. 和python一样,把相同功能的代码放到一个目录,称之为包
2. 包可以被其他包引用
3. main包是用来生成可执行文件,每个程序只有一个main包
4. 包的主要用途是提高代码的可复用性
// go包的类型

- buildin包
- 扩展包(快速发展期,需要import)
- 第三方包(都在github) - 这里涉及到包管理
// 管理包有哪些方式?

- GOPATH管理(go get)
- godep
- dep
- go mod

// 包管理的发展
go get(无版本概念) -> vendor(godep/dep) -> go modules
  • go依赖包(package)管理
// vendor方式 包查找顺序

1. project/vendor
2. GOPATH/src
3. GOROOT/src

随着go的发展,包管理工具日渐进化, 目前新项目都用go mod管理. 难免一些老项目用vendor等管理.

go get(GOPATH方式

将项目放GOPATH/src下

  • 适合个人

  • 适合公司

注: 此时项目目录只能放在 $GOPATH/src下, 否则找不到依赖.

godep方式

vendor管理时期: 目录划分

// 使用go vendor 
go get github.com/tools/godep
godep save                    // 将依赖项输出并复制到Godeps.json文件中

dep方式

go mod使用

注: 此时项目目录可以随便放哪里

go mod init projectname //这个项目名与项目代码寻包路径息息相关
go mod tidy
//开启go mod支持(一般goland直接设置一下就好了,不用管)
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
GO111MODULE=off    //编译时, 从vendor和gopath下找依赖
GO111MODULE=on     //编译时, 忽略vendor和gopath从go.mod去下载依赖
GO111MODULE=auto   //在gopath之外创建目录
// 生成go.mod(go.mod位于项目根目录)
go mod init
go mod init 模块名

// 包管理元信息
go.mod //存放当前模块包名及版本
    module: 定义当前模块和包路径
    require: 定义依赖的模块和版本
    exclude: 排除特定的模块和版本的使用
    replace: 模块源的替换

go.sum //存放当前模块依赖包名以及版本,commit hash

//包下载(存储在gopath/pkg/mod下)
go build  //go文件引用了包,执行这些命令会自动更新go.mod
go run
go mod tidy

go mod vendor      //(便于阅码)将依赖复制到vendor下

//依赖更新
go get [email protected]  //升级某个包
go list -m all     //列出当前依赖
go ilst -m -u all  //列出可升级的依赖
go get -u          //升级所有依赖
  • 更新go.mod示例
// 方法1: go get更新go.mod
go get github.com/tietang/dbx


// 方法2: go.mod会被更新为
require (
    github.com/tietang/dbx v1.0.0
)
// 方法3: 直接程序里写,然后go run/build也会更新go.mod

import (
    "fmt"
    "github.com/tietang/dbx"
    "github.com/tietang/go-utils"
)

func main() {
    x:=dbx.Database{}
    fmt.Println(x)
    utils.GetAllIP()
}

goland使用

Go进阶21:Goland 6条Tips让编程更有效率

猜你喜欢

转载自www.cnblogs.com/iiiiiher/p/12290951.html