go的依赖包管理方式: 1. go get 2. dep/vendor 2. go mod

     不太喜欢写C/C++的makefile

     来说说go的依赖包管理的几种方式:

 

     1. go get xxx     (官方)

     拉下来的包会放在GOPATH/src目录下,如果没有src,那么会生成src目录,  简单。 

     2. dep/vendor (准官方,非官方)

     要求项目工程的目录必须位于GOPATH/src目录或者其子目录下, 然后dep ini, dep ensurv -v搞起。 在很多项目中, 是用这种方式管理的。 最后vendor目录会生成到项目目录中, 其中包含依赖包。

     3.  go mod     (官方, 新版本的golang中才支持)

      通常(其实也可以不这样)也把工程目录放在GOPATH/src目录或者其子目录下, 然后go mod init, go mod tidy搞起。 会在GOPATH中生成pkg, 其中有mod目录,然后其中有依赖包。

 

      来看看代码:

package main
 
import (
    "fmt"
    "github.com/apodemakeles/ugo/time"
)
 
func main() {
    fmt.Println(utime.NowUnixTS())
}

      来看看上述三种包管理方式的结果, GOPATH是~/test/mytest, 执行tree命令:

当前目录是:~/test/mytest,  a.go, b.go, c.go是我写的测试代码, 代码如上:

分别用上述三种包管理方式后,执行tree命令来看看目录和文件:
.
|-- a.go
|-- pkg
|   |-- darwin_amd64  ======================(这个是go get时生成的)
|   |   `-- github.com
|   |       `-- apodemakeles
|   |           `-- ugo
|   |               `-- time.a
|   |-- dep           ======================(这个是dep时生成的)
|   |   `-- sources
|   |       `-- https---github.com-apodemakeles-ugo
|   |           |-- Gopkg.lock
|   |           |-- Gopkg.toml
|   |           |-- README.md
|   |           |-- assert
|   |           |   `-- uassert.go
|   |           |-- ctl
|   |           |   |-- pair.go
|   |           |   |-- pair_test.go
|   |           |   |-- supervisor.go
|   |           |   `-- supervisor_test.go
|   |           |-- st
|   |           |   |-- queue.go
|   |           |   |-- queue_test.go
|   |           |   |-- sliq.go
|   |           |   `-- sliq_test.go
|   |           `-- time
|   |               `-- utime.go
|   `-- mod          ======================(这个是go mod时生成的)
|       |-- cache
|       |   |-- download
|       |   |   `-- github.com
|       |   |       `-- apodemakeles
|       |   |           `-- ugo
|       |   |               `-- @v
|       |   |                   |-- list
|       |   |                   |-- list.lock
|       |   |                   |-- v0.3.0.info
|       |   |                   |-- v0.3.0.lock
|       |   |                   |-- v0.3.0.mod
|       |   |                   |-- v0.3.0.zip
|       |   |                   `-- v0.3.0.ziphash
|       |   |-- lock
|       |   `-- vcs
|       |       |-- 068498352f5a03a2b062b41194c2c11551b72916629f773f715c1839d07ddd68
|       |       |   |-- FETCH_HEAD
|       |       |   |-- HEAD
|       |       |   |-- config
|       |       |   |-- description
|       |       |   |-- hooks
|       |       |   |   |-- applypatch-msg.sample
|       |       |   |   |-- commit-msg.sample
|       |       |   |   |-- post-update.sample
|       |       |   |   |-- pre-applypatch.sample
|       |       |   |   |-- pre-commit.sample
|       |       |   |   |-- pre-push.sample
|       |       |   |   |-- pre-rebase.sample
|       |       |   |   |-- pre-receive.sample
|       |       |   |   |-- prepare-commit-msg.sample
|       |       |   |   `-- update.sample
|       |       |   |-- info
|       |       |   |   |-- attributes
|       |       |   |   `-- exclude
|       |       |   |-- objects
|       |       |   |   |-- 0b
|       |       |   |   |   `-- d068f0b8d570f12aa127cbce953ac0090e4b52
|       |       |   |   |-- 19
|       |       |   |   |   `-- 9e6158a3489fc0c2896fb5eaa3eb61009284b0
|       |       |   |   |-- 29
|       |       |   |   |   |-- 4646118961a161c079acd81ea72528dbc74da4
|       |       |   |   |   `-- d7613714aa66c4105faadade545f3c7c526370
|       |       |   |   |-- 40
|       |       |   |   |   |-- 120f31a2aa92e25ea4bbb3137c123858a62581
|       |       |   |   |   `-- 9cd32df44b4fe5c37af9c75df8073178c95e15
|       |       |   |   |-- 4b
|       |       |   |   |   `-- 859edab10857ad6fce38854014df32126aedb1
|       |       |   |   |-- 66
|       |       |   |   |   `-- 94943180f8f966d3b9e0a50ab4f640e7405517
|       |       |   |   |-- 68
|       |       |   |   |   `-- cff4ce24d1623e4c3cc1af93c6782317635977
|       |       |   |   |-- 81
|       |       |   |   |   `-- 5a0036bd88ac3ed0fa0e3085c528089140ac19
|       |       |   |   |-- 82
|       |       |   |   |   |-- 59276f5c257c1a3fd939a328fbdd11ca30f341
|       |       |   |   |   `-- adc92cc444a262d79a5c1bde54c11a5021c0c1
|       |       |   |   |-- a0
|       |       |   |   |   `-- edbfd929c2669f1c79c7841c876e6a442f3c3b
|       |       |   |   |-- a4
|       |       |   |   |   `-- 717f99eeea7028ff1939f8f7d17fceb38fbfbc
|       |       |   |   |-- a5
|       |       |   |   |   `-- 5e3de522ab8f649795fb477eadbdcee2543e09
|       |       |   |   |-- be
|       |       |   |   |   |-- 033ecc565052f17c95039fa94f5da6cf27ce06
|       |       |   |   |   `-- f2d0092eb5e822ef996e91009ac977094a9fe8
|       |       |   |   |-- cf
|       |       |   |   |   `-- 7b5e6b1f78c06fc8b8b2a86434ccdc5b34cde5
|       |       |   |   |-- d1
|       |       |   |   |   `-- f43c8e9a444c010b766c7bbe5cc5032ad60bf5
|       |       |   |   |-- e2
|       |       |   |   |   `-- 519cebb2ef0f4130ba4cf1a54636eeecab7aae
|       |       |   |   |-- f4
|       |       |   |   |   `-- 79089a2401446fdf51ef3b06d4430af15894a6
|       |       |   |   |-- info
|       |       |   |   `-- pack
|       |       |   |-- refs
|       |       |   |   |-- heads
|       |       |   |   `-- tags
|       |       |   |       `-- v0.3.0
|       |       |   `-- shallow
|       |       |-- 068498352f5a03a2b062b41194c2c11551b72916629f773f715c1839d07ddd68.info
|       |       `-- 068498352f5a03a2b062b41194c2c11551b72916629f773f715c1839d07ddd68.lock
|       `-- github.com
|           `-- apodemakeles
|               `-- ugo@v0.3.0
|                   |-- Gopkg.lock
|                   |-- Gopkg.toml
|                   |-- README.md
|                   |-- assert
|                   |   `-- uassert.go
|                   |-- ctl
|                   |   |-- pair.go
|                   |   |-- pair_test.go
|                   |   |-- supervisor.go
|                   |   `-- supervisor_test.go
|                   |-- st
|                   |   |-- queue.go
|                   |   |-- queue_test.go
|                   |   |-- sliq.go
|                   |   `-- sliq_test.go
|                   `-- time
|                       `-- utime.go
`-- src
    |-- b.go
    |-- github.com  ======================(这个是go get时生成的)
    |   `-- apodemakeles
    |       `-- ugo
    |           |-- Gopkg.lock
    |           |-- Gopkg.toml
    |           |-- README.md
    |           |-- assert
    |           |   `-- uassert.go
    |           |-- ctl
    |           |   |-- pair.go
    |           |   |-- pair_test.go
    |           |   |-- supervisor.go
    |           |   `-- supervisor_test.go
    |           |-- st
    |           |   |-- queue.go
    |           |   |-- queue_test.go
    |           |   |-- sliq.go
    |           |   `-- sliq_test.go
    |           `-- time
    |               `-- utime.go
    `-- yourtest
        |-- Gopkg.lock   ======================(这个是dep时生成的)
        |-- Gopkg.toml   ======================(这个是dep时生成的)
        |-- c.go
        |-- go.mod       ======================(这个是go mod时生成的)
        |-- go.sum       ======================(这个是go mod时生成的)
        `-- vendor       ======================(这个是dep时生成的)
            `-- github.com
                `-- apodemakeles
                    `-- ugo
                        `-- time
                            `-- utime.go

       个人推荐第三种用法。

       另外, 在go init生成go.mod和pkg中的部分内容后, 如果直接去编译, 则类似于先执行go mod tidy了, 生成go.sum, 并自动拉下所需要的包, 放在pkg的mod中。

       一目了然,  有兴趣可以看看其中重要文件的内容。

       最后, 来看一个环境变量:GO111MODULE:

       环境变量 GO111MODULE 开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是 auto

  • GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。
  • GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。
  • GO111MODULE=auto 在 GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。

 

       不多说。

 

 

 

 

发布了2203 篇原创文章 · 获赞 4516 · 访问量 1960万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览