当前位置: 首页 > 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.xdnf.cn/news/1335583.html

相关文章:

  • 【NFTurbo】基于Redisson滑动窗口实现验证码发送限流
  • 【运维】githubvercel学习使用
  • nginx-下载功能-状态统计-访问控制
  • Qt 中最经典、最常用的多线程通信场景
  • 安装electron报错的解决方法
  • 【Express零基础入门】 | 构建简易后端服务的核心知识
  • jvm三色标记
  • imx6ull-驱动开发篇30——Linux 非阻塞IO实验
  • 机器学习--数据清洗—(续篇)
  • 算法 ----- 链式
  • 基础笔记8.20
  • 【运维进阶】shell三剑客
  • RK-Android11-PackageInstaller安装器自动安装功能实现
  • 福昕PDF编辑软件高级版下载与详细图文安装教程!!
  • 力扣 30 天 JavaScript 挑战 第36天 第8题笔记 深入了解reduce,this
  • 【嵌入式电机控制#34】FOC:意法电控驱动层源码解析——HALL传感器中断(不在两大中断内,但重要)
  • day075-MySQL数据库服务安装部署与基础服务管理命令
  • 《算法导论》第 35 章-近似算法
  • imx6ull-驱动开发篇31——Linux异步通知
  • 极其简单二叉树遍历JAVA版本
  • 虚拟机部署HDFS集群
  • Redisson最新版本(3.50.0左右)启动时提示Netty的某些类找不到
  • VR交通安全学习机-VR交通普法体验馆方案
  • 从防抖节流到链表树:编程世界中的抽象优化艺术
  • C++智能指针详解:告别内存泄漏,拥抱安全高效
  • Flask高效数据库操作指南
  • C++ MFC/BCG编程:文件对话框(CFileDialog、CFolderPickerDialog)
  • CFBench评测
  • (一)关于步进电机的FOC控制
  • DeepSeek大模型如何重塑AI Agent?从技术突破到行业落地