golang 包管理

  • 自动下载所有依赖包
    • go get -d -v ./...
      • -d 只下载代码包,不执行安装命令
      • -v 打印详细日志和调试日志。这里加上这个标志会把每个下载的包都打印出来;
      • ./...这个表示路径,代表当前目录下所有的文件。

modules

  • 通过go.mod文件记录包依赖,go.sum文件避免恶意修改

  • 项目不必一定要组织在GOPATH路径下

    • import的包源码也不再是组织在src目录下,而是pkg/mod目录下
    • 该目录下的包名后面还会有@<tag_num>,这样go mod就可以区分不同版本
      • 例如$GOPATH\pkg\mod\github.com\go-sql-driver\[email protected]
      • 版本号就是 repo 的 tag
      • 对于没有打 tag 的,go.mod 的格式是 pseudo-version。它的含义是v0.0.0-yyyymmddhhmmss-abcdefabcdef
  • 从govendor迁移到gomod只要go mod init 模块名然后go run/build一次即可

  • 通过replace能够重定向包地址

    • google域名下的包可以重定向到GitHub
  • 环境变量GO111MODULE设置为on则强制使用mod模式,设置为auto则在GOPATH路径外开启

  • 模块名可以任意取,但是为了更具有兼容性,应该遵循github.com/name/repo的格式

常用命令

go mod init <模块名> # 初始化模块
go mod download # 下载依赖包
go mod tidy # 移除未用到的包,下载缺失的包
go mod verity # 验证包依赖是否正确
go mod vendor # 生成vendor目录

参考

github-Modules
Golang Package 与 Module 简介

vendor

  • vendor目录下的vendor.json文件记录的所有依赖信息
    • 在上传项目到GitHub时,可以只上传vendor.json文件,其他人可以通过govendor sync命令根据该文件重新安装依赖到vendor文件夹
# 安装govendor
go get -u -v github.com/kardianos/govendor

# 常用命令
govendor init  # 初始化vendor目录
govendor list  # 列出当前所有包依赖
govendor add package_path # 添加依赖包
govendor add +e # 添加所有为什么GOPATH路径下的依赖包
govendor fetch packge_path #添加远程依赖包
govendor update packge_path #更新依赖包
govendor remove packge_path #删除依赖包
govendor sync #根据vendor.json安装依赖包

在这里插入图片描述

参考

https://blog.csdn.net/dupeng0811/article/details/89877712

import

  • 当我们导入第三方包时,编译器优先寻找已经编译好的包对象(pkg目录下),如果没有包对象,就会去源码目录寻找相应的源码来编译
  • 当我们在其他项目引入包含 internal包的依赖时,Go 语言会在编译时报错
    • 这种错误只有在被引入的 internal 包不存在于当前项目树中才会发生,如果在同一个项目中引入该项目的 internal 包并不会出现这种错误
      在这里插入图片描述

      在这里插入图片描述

init

  • init函数会在main函数之前执行
  • 需要使用_空标志符来导入一个包的目的,就是想执行这个包里的init函数
  • 我们不应该在 init 中做过重的初始化逻辑,而是做一些简单、轻量的前置条件判断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CPiOTHbD-1570015024097)(C:\Users\35135\AppData\Roaming\Typora\typora-user-images\1569987665508.png)]

发布了161 篇原创文章 · 获赞 19 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/winter_wu_1998/article/details/101746005
今日推荐