Golang包管理

go包管理

历史

gopath

go 1.5版本之前

  • GOPATH

    • src 存放源代码
    • pkg存放编译后的文件
    • bin存放编译后的可执行文件
  • 通过统一包存放的路径来进行管理

  • 不支持依赖包的版本控制

  • gopath模式下工程代码必须放在GOPATH/src下

  • go get 将远程代码克隆到GOPATH/src目录下

  • go install 将二进制文件保存到GOPATH/bin目录下 添加-d只下载不安装,若是普通包则会生成.a结尾的文件放到GOPATH/pkg下

go Vendor

go 1.5版本及以后

  • 将源码拷贝到vendor目录并维护vendor.js文件 指定版本
  • 使用
    • 安装go get -u github.com/kardianos/govendor
    • 初始化 govendor init
    • 将依赖包加入到vendor目录 govendor add +external
    • 移除依赖 govendor remove +unused
  • 缺点依赖不能重用,会造成冗余
go Modules

go 1.11版本及以后

  • 使用
    • go mod init
    • go mod tidy
    • go mod download 卸载依赖包到本地
    • go mod vendor 兼容vendor
  • go.mod
    • module 使用仓库代码,直接改成github链接
    • go 1.20 最低支持版本
    • require 直接依赖包
    • indirect 只会导入间接依赖包中没有go.mod的依赖,并且会生成伪版本号(版本号-UTC提交时间-commit哈希)
  • go.sum
    • 触发项目编译后生成
    • 直接,间接依赖的所有包
    • 同样的包数据只会缓存一份,所有其他模块共享使用,可以使用go clean -modcache来清除缓存
    • 不对依赖包做hash校验的情况
      • GOPRIVATE匹配到的包
      • 打包到vendor目录的包
      • GOSUMDB 设置为off 都不会做校验
posted @   肆月初陸丶  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示