zoukankan      html  css  js  c++  java
  • 解决go get命令下载包出问题

    一、GO111MODULE介绍
    //为了解决项目不用放在go的src目录下,src应该放一些官方的包,而不应该放项目
    //模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,
    //包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。
     
    //GO111MODULE 有三个值:off, on和auto(默认值)
    //GO111MODULE=off //go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
    //GO111MODULE=on //go命令行会使用modules,不会去GOPATH目录下查找。
    //GO111MODULE=auto //默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
     
    //当前目录在GOPATH/src之外且该目录包含go.mod文件。
    //当前文件在包含go.mod文件的目录下面。
    //当modules 功能启用时,依赖包的存放位置变更为$GOPATH/pkg,允许同一个package多个版本并存,且多个项目可以共享缓存的 module。
     
    //go mod 命令:
    download //下载依赖包
    edit //编辑go.mod
    graph //打印模块依赖图
    init //在当前目录初始化mod
    tidy //拉取缺少的模块,移除不用的模块
    vendor //将依赖复制到vendor下
    verify //验证依赖是否正确
    why //解释为什么需要依赖
     
    //配置
    //开启模块支持
    //set GO111MODULE=on
     
    //设置代理,windows是set,Lnix是export
    //set GOPROXY=https://goproxy.io
     
    //阿里云镜像
    //set GOPROXY=https://mirrors.aliyun.com/goproxy/
    //export GOPROXY=https://mirrors.aliyun.com/goproxy/
     
    //go1.13版本可以使用以下方法
    //go env -w GOPROXY=https://goproxy.io,direct
    //go env -w GO111MODULE=on
    //go env -u 恢复初始设置
     
     
    二、测试
    //1.在GOPATH之外,新建文件夹,新建main.go
    package main
     
    import (
    "github.com/kataras/iris"
     
    "github.com/kataras/iris/middleware/logger"
    "github.com/kataras/iris/middleware/recover"
    )
     
    func main() {
    app := iris.New()
    app.Logger().SetLevel("debug")
    app.Use(recover.New())
    app.Use(logger.New())
    app.Get("/", func (ctx iris.Context){
    ctx.HTML("Hello========================")
    })
     
    app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
    }
     
    //2.在main.go所在目录下打开cmd
    //初始化mod,生成go.mod
    //go mod init 文件夹名
    //go.mod文件一旦创建后,它的内容将会被go toolchain全面掌控。
    //go toolchain会在各类命令执行时,比如go get、go build、go mod等修改和维护go.mod文件。
     
    //go.mod 提供了module, require、replace和exclude 四个命令
    //module 语句指定包的名字(路径)
    //require 语句指定的依赖项模块
    //replace 语句可以替换依赖项模块
    //exclude 语句可以忽略依赖项模块
     
    //go.mod文件如下:
    //module 123
    //
    //go 1.13
     
    //go mod tidy需要的依赖自动生成 require 语句
    //go mod tidy 从 go.mod 删除不需要的依赖、新增需要的依赖,这个操作不会改变依赖版本
    //go mod tidy //加载依赖,可以省略这一步
     
    //go.mod如下:
    //module 123
    //
    //go 1.13
    //
    //require (
    //github.com/astaxie/beego v1.12.1
    //github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
    //)
     
    //go 会自动生成一个 go.sum 文件来记录 dependency tree(依赖树)
    //github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
    //github.com/OwnLocal/goes v1.0.0/go.mod h1:8rIFjBGTue3lCU0wplczcUgt9Gxgrkkrw7etMIcn8TM=
    //github.com/astaxie/beego v1.12.1 h1:dfpuoxpzLVgclveAXe4PyNKqkzgm5zF4tgF2B3kkM2I=
    //github.com/astaxie/beego v1.12.1/go.mod
    //...
     
    //3. 运行
    //go run main.go //第一次go run没有go mod tidy的情况下,运行的过程中需要下载包,速度很慢,可以设置阿里云的镜像
    //再次执行脚本 go run server.go 发现跳过了检查并安装依赖的步骤,下载的包在go的src下的github.com下
    //可以使用命令 go list -m -u all 来检查可以升级的package,
    //使用go get -u need-upgrade-package 升级后会将新的依赖版本更新到go.mod *
    //也可以使用 go get -u 升级所有依赖
     
    //4. 生成exe文件
    //go build main.go //没有go mod tidy的情况下,运行的过程中需要下载包,速度很慢,可以设置阿里云的镜像
    //将依赖复制到vendor下
    //go mod vendor //可以把vendork里面的文件夹复制到go的src中,这样就能在src下创建项目使用了
     
     
    三、解决go get命令下载包出问题
    //设置GOPATH
    //win10环境变量中添加,设置GOPATH,下载包的路径
     
    //设置代理
    //set GOPROXY=https://goproxy.io
     
    //下载iris
    //下载iris的所有依赖包
    //这些包并没有下载到 GOPATH/src 目录下,而是在 GOPATH/pkg/mod 目录中
    //-x可以看到执行过程
    //go get github.com/kataras/iris
    //-u 强制使用网络去更新包和它的依赖包
    //-v 显示执行的命令
    //go get -v -u github.com/kataras/iris
      
  • 相关阅读:
    java面试
    java多态
    java多线程
    Java操作ElasticSearch
    liunx安装jdk
    linux安装Elasticsearch详细步骤
    java IO流
    java递归
    File文件类
    redis单机多节点集群
  • 原文地址:https://www.cnblogs.com/dqh123/p/13884868.html
Copyright © 2011-2022 走看看