当前位置: 首页 > news >正文

GO环境变量中GO111MODULE到底是干啥的?

  • 查看GO111MODULE变量
  • GO111MODULE的作用
  • GO111MODULE的案例演示

一,查看GO111MODULE变量

]# go env GO111MODULE
或者
]# go env | grep GO111MODULE

在这里插入图片描述

二,GO111MODULE的作用

  • auto : 自动判断机制
    当项目位于 $GOPATH/src 目录外且包含 go.mod 文件时,自动启用模块支持;若项目在 $GOPATH/src 内,则禁用模块支持,沿用传统的 GOPATH 机制
  • on : 强制启用模块支持
    依赖管理通过 go.mod 文件进行版本控制
    依赖包会被下载到 $GOPATH/pkg/mod 目录下
    构建过程不依赖 GOPATH 环境变量
  • off: 强制禁用模块支持
    依赖包需要手动 go get 到 $GOPATH/src 下
    项目导入路径必须匹配 $GOPATH/src 下的目录结构
    所有依赖必须存在于 GOPATH 中

三、GO111MODULE 使用示例

首先我们配置强制开启
window配置方式:
       go env -w GO111MODULE=on
Linux配置方式:
       echo “go env -w GO111MODULE=off” >> ~/.bashrc
       执行 source ~/.bashrc 使配置生效
验证一下是否修改成功
可以看到变量已经成功设置成off的状态 并且我们的GOPATH=/root/go
在这里插入图片描述
这也就意味着我们的package包只会在/root/go/src目录下寻找

下面是我的目录结构
[root@VM-0-3-centos go]# tree src/
src/
├── maindir
│   └── main.go
└── salary└── person└── person.go
 代码我贴在下面]# cat /root/go/src/salary/person/person.go
package person
import ("fmt"
)
type person struct {Name stringage  int sal  float64
}func NewPersion(name string, age int, sal float64) *person {return &person{Name : name,age: age,sal: sal,}
}func (p *person) SetAge(age int){if age >0 && age < 150 {p.age = age}else{fmt.Println("++++不合理++++")}
}
func (p *person) GetAge() int {fmt.Println(p.age)return p.age}func (p *person) SetSal(sal float64) {if sal >= 3000 && sal <= 30000 {p.sal = sal}else{fmt.Println("++++++++salary out of range+++++")}
}
func (p *person) GetSal() float64 {fmt.Println(p.sal)return p.sal
}
]# cat /root/go/src/maindir/main.go
package main
import ("fmt""salary/person"
)func main() {fmt.Println("Starting the main program...")p := person.NewPersion("TOM",21,3000.15)p.GetAge()p.GetSal()p.SetAge(55)p.SetSal(30000)p.GetAge()p.GetSal()
}

下面我们来执行下

package main
import ("fmt""salary/person"
)func main() {fmt.Println("Starting the main program...")p := person.NewPersion("TOM",21,3000.15)p.GetAge()p.GetSal()p.SetAge(55)p.SetSal(30000)p.GetAge()p.GetSal()
}

在这里插入图片描述
可以看到执行成功了
同样的,我在/data/MYPROJECT/目录下有一份结构一样的代码。如下图所示

[root@VM-0-3-centos data]# tree MYPROJECT/
MYPROJECT/
├── maindir
│   └── main.go
└── salary└── person└── person.go
代码是和上边一模一样的,我就不粘贴了,下面我们运行一下试试效果,不过我需要删掉/root/go/src/目录下的person包

在这里插入图片描述

可以看到,他并没有在GOROOT或者GOPATH中找到对应的person package.

那么这个时候,我们打开GO111MODULE=on
[root@VM-0-3-centos maindir]# sed -i 's@GO111MODULE=off@GO111MODULE=on@g' ~/.bashrc 
[root@VM-0-3-centos maindir]# cat ~/.bashrc | tail -1
go env -w GO111MODULE=on
[root@VM-0-3-centos maindir]# source ~/.bashrc
[root@VM-0-3-centos maindir]# go env GO111MODULE
on
可以看到目前GO111MODULE是开启状态
这个时候我们需要go mod init PROJECT让他识别到当前项目,不是必须从GOPATH路径寻找package
[root@VM-0-3-centos MYPROJECT]# go mod init MYPROJECT
go: creating new go.mod: module MYPROJECT
go: to add module requirements and sums:go mod tidy
[root@VM-0-3-centos MYPROJECT]# go mod tidy

在这里插入图片描述

可以看到生成了一个go.mod文件
在这里插入图片描述
这个时候我们需要稍微修改一下main.go. 因为我们初始化的项目根目录是MYPROJECT.
在这里插入图片描述
修改成如下import 路径
在这里插入图片描述

下面让我们运行一下
[root@VM-0-3-centos maindir]# go env GO111MODULE
on
[root@VM-0-3-centos maindir]# pwd
/data/MYPROJECT/maindir
[root@VM-0-3-centos maindir]# go run main.go 
21
3000.15
55
30000

在这里插入图片描述

可以看到运行成功了,利用go mod 可以成功的摆脱了GOPATH的限制.

http://www.dtcms.com/a/340790.html

相关文章:

  • ES常用查询命令
  • HTML应用指南:利用POST请求获取全国刘文祥麻辣烫门店位置信息
  • 无人机图传 便携式5G单兵图传 HDMI图传设备 多卡5G单兵图传设备详解
  • 极其简单二叉树遍历JAVA版本
  • PDF如何在Adobe Acrobat 中用OCR光学识别文档并保存可编辑文档
  • 【开源项目】高效入门视觉强化学习,告别零散资料,一个开源项目搞定500+资源
  • Java 15 新特性及具体应用
  • 从导航工具到空间智能体,高德用AI寻找出路
  • 大数据毕业设计选题推荐-基于大数据的1688商品类目关系分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • ios开发 -- 八股 -- UI视图
  • 51单片机与stm32单片机,先学习哪一个?
  • 牛津大学xDeepMind 自然语言处理(3)
  • 翻译记忆库(TMX)与机器翻译的结合应用
  • 【国内电子数据取证厂商龙信科技】隐私增强技术
  • 论函数指针
  • 深入分析Linux kobject 的工作原理与实现机制
  • 【C语言16天强化训练】从基础入门到进阶:Day 4
  • K8S-Pod资源对象——Pod探针
  • 基于深度学习CenterPoint的3D目标检测部署实战
  • MySQL的简单介绍
  • PyTorch API 5
  • 通过uniapp将vite vue3项目打包为android系统的.apk包,并实现可自动升级功能
  • PyTorch API 7
  • PiscCode集成Hand Landmarker:实现高精度手部姿态检测与分析
  • 查看文件内容
  • kotlin 协程笔记
  • 手机 浏览器调用摄像头扫描二维码Quagga
  • RAG系统文本检索优化:Cross-Encoder与Bi-Encoder架构技术对比与选择指南
  • 时序数据库IoTDB的列式存储引擎
  • 5G-A赋能AR眼镜:毫米级虚实融合的未来已来