zoukankan      html  css  js  c++  java
  • golang中如何进行项目模块及依赖管理

    Go modules 是 Go 语⾔的依赖解决⽅案,发布于 Go1.11,成⻓于 Go1.12,丰富于 Go1.13,正式于 Go1.14 推荐在⽣产上使⽤。

    解决了什么问题 ?

    Go 语⾔⻓久以来的依赖管理问题。

    “淘汰”现有的 GOPATH 的使⽤模式。

    统⼀社区中的其它的依赖管理⼯具(提供迁移功能)。

    GOPATH的⼯作模式

    GOPATH的弊端 :⽆版本控制概念 ⽆法同步⼀致第三⽅版本号 ⽆法指定当前项⽬引⽤的第三⽅版本号

    Go Modules模式

    go mod命令

    go mod init ⽣成 go.mod ⽂件

    go mod download 下载 go.mod ⽂件中指明的所有依赖

    go mod tidy 整理现有的依赖

    go mod graph 查看现有的依赖结构

    go mod edit 编辑 go.mod ⽂件

    go mod vendor 导出项⽬所有的依赖到vendor⽬录

    go mod verify 校验⼀个模块是否被篡改过

    go mod why 查看为什么需要依赖某模块

     go mod 环境变量

    GO111MODULE 是否开启go modules模式 建议go V1.11之后,都设置为on

    GOPROXY 项⽬的第三⽅依赖库的下载源地址 建议设置国内的地址 阿⾥云 https://mirrors.aliyun.com/goproxy/ 七⽜云 https://goproxy.cn,direct

    direct ⽤于指示 Go 回源到模块版本的源地址去抓取(⽐如 GitHub 等)

    GOSUMDB ⽤来校验拉取的第三⽅库是否是完整的 默认也是国外的⽹站,如果设置了GOPROXY,这个就不⽤设置了

    GONOPROXY 通过设置GOPRIVATE即可

    GONOSUMDB 通过设置GOPRIVATE即可

    GOPRIVATE 通过设置GOPRIVATE即可

    go env -w GOPRIVATE="git.example.com,github.com/aceld/zinx 表示git.example.com 和 github.com/aceld/zinx 是私有仓库,不会进⾏GOPROXY下载和校验

    go evn -w GOPRIVATE="*.example.com" 表示所有模块路径为example.com的⼦域名,⽐如 git.example.com 或者 hello.example.com 都不进⾏ GOPROXY下载和校验

    通过 go env来查看环境变量 go env -w GO111MODULE=on 或者通过 Linux export 环境⽅式也可以

    使⽤Go Modules初始化项⽬

    1 开启Go Modules模块 保证GO111MODULE=on

    go env -w GO111MODULE=on

    export GO111MODULE=on              设置在⽤户启动脚本中 需要重新打开终端或者执⾏source ~/.bashrc

    2 初始化项⽬

    (1)任意⽂件夹创建⼀个项⽬(不要求在$GOPATH/src) mkdir -p $HOME/aceld/modules_test

    (2)创建go.mod⽂件,同时起当前项⽬的模块名称 go mod init github.com/aceld/module_test

    就会⽣成⼀个go mod⽂件

    module github.com/aceld/moudles_test
    go 1.14

    在该项⽬编写源代码

    如果源代码中依赖某个库(⽐如: github.com/aceld/zinx/znet)

    ⼿动down go get github.com/aceld/zinx/znet

    ⾃动down

    (3)go mod ⽂件会添加⼀⾏新代码

    module github.com/aceld/moudles_test
    go 1.14
    require github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746 // indirect

    含义当前模块依赖github.com/aceld/zinx

    依赖的版本是 v0.0.0-20200315073925-f09df55dc746

    //indirect 表示间接依赖 因为项⽬直接依赖的是znet包 所以所间接依赖zinx包

    (4)会⽣成⼀个go.sum⽂件

    github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746 h1:TturbcEfboY81jsKVSQtGkqk8FN8ag0TmKYzaFHflmQ=

    github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746/go.mod h1:bMiERrPdR8FzpBOo86nhWWmeHJ1cCaqVvWKCGcDVJ5M=

    github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=

    go.sum⽂件的作⽤ 罗列当前项⽬直接或间接的依赖所有模块版本,保证今后项⽬依赖的版本不会被篡改

    h1:hash 表示整体项⽬的zip⽂件打开之后的全部⽂件的校验和来⽣成的hash 如果不存在,可能表示依赖的库可能⽤不上

    xxx/go.mod h1:hash go.mod⽂件做的hash

    修改项⽬模块的版本依赖关系

    go mod edit -replace=zinx@v0.0.0-20200306023939bc416543ae24=zinx@v0.0.0-20200221135252-8a8954e75100

    go mod⽂件就会被修改

    module github.com/aceld/modules_test
    go 1.14
    require github.com/aceld/zinx v0.0.0-20200306023939-bc416543ae24 // indirect
    replace zinx v0.0.0-20200306023939-bc416543ae24 => zinx v0.0.0-20200221135252-8a8954e75100
  • 相关阅读:
    Collatz Conjecture(BAPC2017)
    P3377 【模板】左偏树(可并堆)
    Mergeable Stack
    B. Our Tanya is Crying Out Loud(cf)and 5918: 改变(中石油)
    bzoj 4488: [Jsoi2015]最大公约数
    Zoj
    牛客练习赛43 回顾
    哈尔滨工程大学ACM预热赛 补题
    April Fools Day Contest 2019: editorial回顾补题
    第一周总结
  • 原文地址:https://www.cnblogs.com/peteremperor/p/13713385.html
Copyright © 2011-2022 走看看