前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言笔记----GoMoudle

Go语言笔记----GoMoudle

作者头像
大忽悠爱学习
发布2022-05-10 16:29:47
5930
发布2022-05-10 16:29:47
举报
文章被收录于专栏:c++与qt学习

Go Path模式

GOPATH可以将其理解为工作目录,在这个工作目录下,通常有如下的目录结构

每个目录存放的文件,都不相同

  • bin:存放编译后生成的二进制可执行文件
  • pkg:存放编译后生成的 .a 文件
  • src:存放项目的源代码,可以是你自己写的代码,也可以是你 go get 下载的包

将你的包或者别人的包全部放在 $GOPATH/src 目录下进行管理的方式,我们称之为 GOPATH 模式。

gopath缺陷

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

GoMoudle

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

可以通过下面的命令来设置:

代码语言:javascript
复制
go env -w GO111MODULE=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 初始化项⽬

  • 任意⽂件夹创建⼀个项⽬(不要求在GOPATH/src) mkdir -p HOME/aceld/modules_test
  • 创建go.mod⽂件,同时起当前项⽬的模块名称 go mod init github.com/aceld/module_test
  • 就会⽣成⼀个go mod⽂件
  • 在该项⽬编写源代码
    • 如果源代码中依赖某个库(⽐如: github.com/aceld/zinx/znet)
    • ⼿动down go get github.com/aceld/zinx/znet
    • ⾃动down
代码语言:javascript
复制
module dhy/goTest

go 1.18

require github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746 // indirect
  • 含义当前模块依赖github.com/aceld/zinx
  • 依赖的版本是 v0.0.0-20200315073925-f09df55dc746
  • //indirect 表示间接依赖
  • 因为项⽬直接依赖的是znet包
  • 所以所间接依赖zinx包
  • 会⽣成⼀个go.sum⽂件
代码语言:javascript
复制
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

修改指定版本模块的依赖关系

我们可以对导包的请求路径进行重定向,通过replace完成:

代码语言:javascript
复制
//-replace=旧依赖版本=新依赖版本
go mod edit -replace=zinx@v0.0.0-20200306023939bc416543ae24=zinx@v0.0.0-20200221135252-8a8954e75100

go mod⽂件就会被修改

代码语言:javascript
复制
module github.com/aceld/modules_test
go 1.14
require github.com/aceld/zinx v0.0.0-20200306023939-bc416543ae24 // indirect
//当寻找到github.com/aceld/zinx v0.0.0-20200306023939-bc416543ae24依赖时,会自动重定向到zinx v0.0.0-20200221135252-8a8954e75100
replace zinx v0.0.0-20200306023939-bc416543ae24 => zinx v0.0.0-20200221135252-8a8954e75100

参考文章

何处安放我们的 Go 代码

Go Modules 终极入门

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go Path模式
    • gopath缺陷
    • GoMoudle
      • Go mod命令
        • go mod环境变量
          • 通过 go env来查看环境变量
          • 使⽤Go Modules初始化项⽬
            • 1 开启Go Modules模块
              • 2 初始化项⽬
              • 修改指定版本模块的依赖关系
              • 参考文章
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档