命令 - go get

  1. [go get]
  2. : go 中获取依赖包都是通过执行go get命令
  3. // 通过解析代码中的import语句, 去下载相应的源代码到$GOPATH/src下,
  4. // 然后再进行install, 安装在$GOPATH/pkg下
  5. : go get的问题是没有版本上的控制
  6. // 由于所有的依赖项必须在$GOPATH下有对应的源码和.a文件, 所以在同一台机上的不同项目,没法使用同一依赖项的不同版本
  7. : go 1.5开始官方引入了go vendor机制
  8. // 在原来的project目录下加一个vendor文件夹, 源码都“照搬”到这里, 目录结构不动
  9. // 所有import优先使用vendor中的源码
  10. [依赖解决工具]
  11. : govendor https://golang.org/cmd/go/#hdr-Vendor_Directories
  12. : dep
  13. // https://github.com/golang/dep
  14. // https://golang.github.io/dep/
  15. : godep
  16. // https://github.com/tools/godep
  17. // https://www.iteye.com/blog/wiselyman-2171562
  18. // 语义版本 https://semver.org/
[dep]

    : Golang的官方依赖工具,用来管理和下载工程依赖的工

    # 项目目录初始化
    : dep init
  // vendor # current project的远程依赖的源代码
  // Gopkg.toml 项目依赖记录文件
  // - 记录着current project依赖项project的约束
  // Gopkg.lock

  # 添加新的依赖项
  : dep ensure add github.com/RoaringBitmap/roaring@^1.0.1

-- Gopkg.toml
// 添加依赖项
[[constraint]]
  name = "github.com/apodemakeles/ugo"
  version = "=0.1.0"

  # 根据依赖内容下载编译依赖
  : dep ensure
  // dep中要结合toml和代码中的import语句, 才会真的下载, 编译依赖项

--main.go

package main

import (
    "fmt"
    "github.com/apodemakeles/ugo/time"
)

func main() {
    fmt.Println(utime.NowUnixTS())
}

[godep]

    # 安装
    : go get github.com/tools/godep

  # 将项目纳入Godep管理
  : godep save

[glide]

[vgo]

    : GO 官方依赖工具 (新版本 go^1.11)

    : go get -u golang.org/x/vgo

[govendor]
$ godep help
Godep is a tool for managing Go package dependencies.

Usage:

    godep command [arguments]

The commands are:

    save     list and copy dependencies into Godeps
    go       run the go tool with saved dependencies
    get      download and install packages with specified dependencies
    path     print GOPATH for dependency code
    restore  check out listed dependency versions in GOPATH
    update   update selected packages or the go version
    diff     shows the diff between current and previously saved set of dependencies
    version  show version info

Use "godep help [command]" for more information about a command.