• golang包管理工具


    软件开发中,不可避免的会使用到第三方库,因此包管理工具可以极大的方便开发者管理第三方依赖,避免掉入“依赖地狱”。
    作为google强大背书的golang语言,golang官方包管理工具终于“千呼万唤始出来”。 下面我们就来介绍一下golang的包管理工具

    golang包管理工具

    安装

    go module是go语言内置的包管理工具,安装好go就可以使用
    要求: go version >= 1.11
    命令详细说明如下:

    $ go mod
    Go mod provides access to operations on modules.
    
    Note that support for modules is built into all the go commands,
    not just 'go mod'. For example, day-to-day adding, removing, upgrading,
    and downgrading of dependencies should be done using 'go get'.
    See 'go help modules' for an overview of module functionality.
    
    Usage:
    
    	go mod <command> [arguments]
    
    The commands are:
    
    	download    download modules to local cache
    	edit        edit go.mod from tools or scripts
    	graph       print module requirement graph
    	init        initialize new module in current directory
    	tidy        add missing and remove unused modules
    	vendor      make vendored copy of dependencies
    	verify      verify dependencies have expected content
    	why         explain why packages or modules are needed
    
    Use "go help mod <command>" for more information about a command.
    

    设置环境变量:GO111MODULE

    • 可在 /etc/profile 或 ~/.bash_profile 下添加 'GO111MODULE=on', 永久生效(新打开终端)
    • 或在单个工程根目录下,在终端下输入 'export GO111MODULE=on',临时生效(本终端)

    注:modules 功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,并且是文件权限是只读的 -r--r--r--,且多个项目可以共享缓存的 module

    操作手册

    初始化,并下载依赖

    进入到当前工程的目录下

    $ go mod init github.com/USERNAME/myRepo #生成go.mod文件(项目中只需要执行一次)
    $ go mod tidy #下载依赖包
    $ go mod verify #验证(optional)
    

    vendor模式

    执行go mod vendor,会在项目下生成新的vendor目录,并把项目依赖下载到vendor中,(在go mod诞生之前,相信大家都比较熟悉govendor,这里不在赘述)
    此时vendor里的依赖只有项目中被使用的文件(例如:未被引用的子目录 、*_test.go等不会被包含)

    golang第三方包源

    墙外有很多优秀的资源, 比如golang.org上的第三方包,可以通过以下两种方式来下载

    代理goproxy

    设置golang环境变量GOPROXY

    export GOPROXY=http://goproxy.io (官方维护,香港节点,该地址可稳定访问)
    export GOPROXY=http://mirrors.aliyun.com/goproxy/ (该地址速度快,但有些包版本无法获取)
    export GOPROXY=https://athens.azurefd.net   (微软cdn节点,也很稳定,快速) 推荐 
    export GOPROXY=https://gocenter.io
    

    注:上述golang源选择其一即可。如果你使用的 Go version>=1.13, 可以通过设置 GOPRIVATE 环境变量来控制哪些私有仓库和依赖(公司内部仓库)不通过proxy来拉取,直接走本地,设置如下:

    go env -w GOPROXY=https://goproxy.io,direct
    go env -w GOPRIVATE=*.corp.example.com # 设置不走 proxy 的私有仓库,多个用逗号相隔
    
    地址替换replace

    go mod提供了replace来解决国内开发者无法访问墙外资源的痛苦。具体方法如下:
    编辑go.mod文件,在文件末尾添加下面这些被墙的包,执行go mod tidy下载。下面整理了一下经常需要的包~

    replace golang.org/x/net => github.com/golang/net latest
    replace golang.org/x/tools => github.com/golang/tools latest
    replace golang.org/x/crypto => github.com/golang/crypto latest
    replace golang.org/x/sys => github.com/golang/sys latest
    replace golang.org/x/text => github.com/golang/text latest
    replace golang.org/x/sync => github.com/golang/sync latest
    replace golang.org/x/exp => github.com/golang/exp latest
    replace golang.org/x/lint => github.com/golang/lint latest
    replace golang.org/x/oauth2 => github.com/golang/oauth2 latest
    replace golang.org/x/time => github.com/golang/time latest
    replace golang.org/x/image => github.com/golang/image latest
    replace golang.org/x/mobile => github.com/golang/mobile latest
    replace cloud.google.com/go => github.com/googleapis/google-cloud-go latest
    replace google.golang.org/grpc => github.com/grpc/grpc-go latest
    replace google.golang.org/appengine => github.com/golang/appengine latest
    replace google.golang.org/genproto => github.com/googleapis/go-genproto latest
    replace google.golang.org/api => github.com/googleapis/google-api-go-client latest
    

    使用自己的私有包

    问题1
    cannot load xxx: cannot find module providing package xxx

    解决方法:xxx是私有包,私有包如果不想发布到网上,需要手动添加require ,然后replace 进行替换,将私有包指向本地module所在的绝对或相对路径
    一般用相对路径更通用。

    手动修改go.mod 添加xxx的require和replace

    require (
          xxx v0.0.0
    )
    replace xxx v0.0.0 => ./xxx
    

    再度运行go test 命令,发现仍有失败提示如下,找不到xxx文件夹下的go.mod文件。
    问题2

    go: parsing xxxgo.mod: open xxxgo.mod: The system cannot find the file specified.
    go: error loading module requirements
    

    解决方法:xxx库也需要使用Module管理,为私有包xxx也生成mod文件。运行如下命令:

    cd xxx;
    go mod init xxx
    

    xxx文件夹下的go.mod文件如下:

    module dbredis
    go 1.12
    

    okay~

    ---------------------------Go:simple is better. -------------------------------

  • 相关阅读:
    HDU 5795 A Simple Nim ——(Nim博弈 + 打表)
    【Insertion Sorted List】cpp
    【Merge K Sorted Lists】cpp
    【Merge Two Sorted Lists】cpp
    【Merge Sorted Array】cpp
    【Sum Root to Leaf Numbers】cpp
    【Binary Tree Maximum Path Sum】cpp
    【Path Sum II】cpp
    【Path Sum】cpp
    【Maximum Depth of Binary Tree 】cpp
  • 原文地址:https://www.cnblogs.com/informatics/p/11431119.html
Copyright © 2020-2023  润新知