• Go 语言中的 Moduels 管理(Let‘s Go 三十四)


    Go 1.11以前使用包管理一直被开发者所诟病。既然GOPATH这种包管理引起了一线开发者的一片骂声,所以,Go官方体恤一线开发者对GOPATH这种包管理的情绪,一直致力于提供对一线开发者友好的包管理解决方案而奋斗。从最初的GOPATHGO VENDOR,再到现在最新的GO MODULES,这期间,Go 官方不免走了很多弯路,但展现在我们跟前的GO MODULES已是很像样的模块管理了。

    在命令行窗口输入 go env命令,可以看到,多了个GO111MODULE变量,111是代表Go 1.11版本提出来的。

    它有三个可选值:offonauto,默认值是auto

    1. GO111MODULE=off禁用模块支持,编译时会从GOPATHvendor文件夹中查找包。
    2. GO111MODULE=on启用模块支持,编译时会忽略GOPATHvendor文件夹,只根据 go.mod下载依赖。
    3. GO111MODULE=auto,当项目在$GOPATH/src外且项目根目录有go.mod文件时,自动开启模块支持。

    GO111MODULEGo 1.13版本之后默认是开打的。

    在这里插入图片描述

    go mod 依赖管理

    go mod不再依靠$GOPATH,以至于它可以不必在$GOPATH目录创建 Go 项目。

    依次在该目录创建文件夹和main.go文件。

    在这里插入图片描述

    在这里插入图片描述

    使用以下命令自动生成go.mod文件。

    go mod init github.com/zhenqi/module-main
    
    • 1

    在这里插入图片描述

    编辑main.go文件,输入以下内容。

    package main
    
    import (
    	log "github.com/sirupsen/logrus"
    )
    
    func main(){
    	log.WithFields(log.Fields{
    		"animal": "walrus"
    	}).Info("A walrus appears")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    由于使用了第三方依赖库,需要先下载依赖库。

    go get github.com/sirupsen/logrus
    
    • 1

    执行该语句会报错。

    在这里插入图片描述

    这是由于自Go 1.13以后的版本,GOPROXY默认值为proxy.golang.org,很不巧,这个地址在国内却无法访问啊!那该怎么办呢?好在国内大厂商提供了镜像,那便是 七牛云 推出的 goproxy.cn,好让国内开发者更好的使用GO MODULES

    go env -w GOPROXY=https://goproxy.cn,direct
    
    • 1

    在这里插入图片描述

    再次运行go get github.com/sirupsen/logrus 命令,可以看到,正在下载第三方依赖。

    在这里插入图片描述

    打开go.mod文件,明显追加了几行内容。

    在这里插入图片描述

  • 相关阅读:
    微服务框架 SpringCloud微服务架构 10 使用Docker 10.3 容器命令介绍
    机器学习笔记之概率图模型(十)因子图
    使用VBA快速完成不规则数据整理
    数据结构题型12-链式队列
    一次IOS通知推送问题排查全过程
    Python 自动化教程(5) : 自动生成Word文件
    Java中的多重继承问题
    分享三款免费好用的远程控制软件!
    【C语言】文件的操作与文件函数的使用(详细讲解)
    线性代数学习笔记4-1:线性方程组的数学和几何意义、零空间/解空间/核
  • 原文地址:https://blog.csdn.net/coco2d_x2014/article/details/127813764