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.pswp.cn/pingmian/93890.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93890.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93890.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在線培訓機構如何降低培訓視頻被盜錄的風險

每一節精心錄制的培訓視頻&#xff0c;都凝聚著講師的心血與機構的巨大投入。然而&#xff0c;只需一個簡單的錄屏軟件&#xff0c;這一切都可能被輕易竊取。一旦被盜取&#xff0c;不但會損失經濟利益&#xff0c;還可能會影響機構的聲譽。那么&#xff0c;在線培訓機構如何降…

Docker:安裝配置

目錄一、卸載舊版本二、配置Docker的yum庫三、安裝Docker3.1 在線安裝方式3.2 離線安裝方式四、配置阿里云鏡像加速【選配】五、Docker服務相關命令六、導出和導入鏡像官網 一、卸載舊版本 首先如果系統中已經存在舊版本的Docker&#xff0c;則先卸載&#xff1a; yum remov…

RabbitMQ:SpringAMQP 入門案例

目錄一、概述二、基礎配置三、生產者四、消費者一、概述 這是一篇Java集成RabbitMQ的入門案例&#xff0c;在這里我們做一個小案例&#xff0c;來體會一下RabbitMQ的魅力。 首先我們要做的就是創建一個生產者一個消費者&#xff1a; 生產者直接向RabbitMQ的隊列&#xff08;Q…

Ubuntu 下面安裝搜狗輸入法debug記錄

目錄0. 整體安裝流程1. 在鍵盤輸入法系統中&#xff0c;沒有“fcitx”選項解決方法0. 整體安裝流程 詳細的Ubuntu搜狗輸入法安裝指南請參考官方教程&#xff1a;Ubuntu搜狗輸入法安裝指南 1. 在鍵盤輸入法系統中&#xff0c;沒有“fcitx”選項 即使是安裝完 fcitx&#xff0…

Jenkins+GitLab在CentOS7上的自動化部署方案

最近在安裝jenkins實現微服務的自動發布&#xff0c;記錄配置過程以免再次踩坑。 Centos7環境準備 jenkins、gitlab配置&#xff0c;全程使用ftpuser普通用戶操作 &#xff08;1&#xff09;安裝好jdk并配置好環境變量 安裝路徑/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.…

打開或者安裝Navicat時出現Missing required library libcurl.dll,126報錯解決方法(libmysql_e.dll等)

提示 Missing required library libcurl.dll 出現原因是由于Navicat安裝目錄下libcurl.dll可能不能用了&#xff0c;下載該文件放到Navicat安裝目錄下即可。下載地址&#xff1a;libcurl.dll — download free for Windows 下載解壓包里只有個libcurl.dll 提示 Missing requir…

基于SpringBoot的流浪動物領養管理系統【2026最新】

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

Qt實現TabWidget通過addTab函數添加的頁,頁內控件自適應窗口大小

前言&#xff1a;因為項目的要求&#xff0c;需要把幾個不同類型功能的界面集成在同一個窗口中&#xff0c;方便用戶不切換窗口&#xff0c;也能快捷的操作不同類型的功能。我首先想到的是通過選項卡方式&#xff0c;讓幾個類別的功能界面通過不同選項卡進行切換&#xff0c;這…

代碼隨想錄算法訓練營27天 | ??56. 合并區間、738.單調遞增的數字、968.監控二叉樹(提高)

題目鏈接&#xff1a;56. 合并區間、738.單調遞增的數字、968.監控二叉樹 文章鏈接&#xff1a;代碼隨想錄 貪心算法 1. 合并區間 &#xff08;待更新...&#xff09; class Solution { private:static bool cmp(const vector<int>& a, const vector<int>&…

從 H.264/H.265 到 H.266:RTSP播放器的跨代際演進

引言&#xff1a;H.266與實時視頻的交匯點 視頻編解碼的發展歷程&#xff0c;始終是 帶寬效率與視覺體驗的博弈。從 H.264 的普及&#xff0c;到 H.265/HEVC 的深化應用&#xff0c;每一次標準迭代&#xff0c;都在推動視頻向更高分辨率、更高幀率、更復雜場景的應用邁進。而 …

oc-mirror plugin v2 錯誤could not establish the destination for the release i

openshift 4.19使用的鏡像倉庫為harbor. 運行disk to registry時出現下面的錯誤&#xff1a; 2025/08/19 17:51:13 [ERROR] : [Executor] [release collector] could not establish the destination for the release image 備注&#xff1a; 我沒有賬戶&#xff0c;無法打開…

Android auncher3實現簡單的負一屏功能

Android launcher3實現簡單的負一屏功能 1.前言&#xff1a; 之前實現過Launcher3從湊提修改成單層&#xff0c;今天來講解一下如何實現一個簡單的負一屏功能&#xff0c;涉及的類如下&#xff0c;直接看代碼。 2.NegativeScreenAdapter&#xff1a; package com.example.ne…

跨網閘數據庫同步:在物理隔離中架起安全的數據橋梁

作者:DeepSeek-R1 | 日期:2025年8月17日 引言 在等保2.0和分級保護政策的要求下,高密級網絡(如政務內網、金融核心網)必須與低密級網絡(如互聯網)物理隔離。但業務又要求數據跨網流動(如市民在線提交申請、分支機構數據回傳)。如何解決這一矛盾?雙向網閘與單向光閘成…

【Android】一文詳解Android里的AOP編程

一文詳解Android里的AOP編程 1. 基于 AspectJ&#xff08;編譯期/打包期織入&#xff09; 思路&#xff1a;用 AspectJ 編譯器在 編譯階段 或 Gradle Transform 階段&#xff0c;把切面邏輯織入 class / bytecode。 特點&#xff1a; 能實現類似 Spring AOP 的注解切面&#…

AI+預測3D新模型百十個定位預測+膽碼預測+去和尾2025年8月21日第167彈

從今天開始&#xff0c;咱們還是暫時基于舊的模型進行預測&#xff0c;好了&#xff0c;廢話不多說&#xff0c;按照老辦法&#xff0c;重點8-9碼定位&#xff0c;配合三膽下1或下2&#xff0c;殺1-2個和尾&#xff0c;再殺4-5個和值&#xff0c;可以做到100-300注左右。(1)定位…

機器學習【十】neural network

系統梳理了機器學習與神經網絡的基礎知識&#xff0c;涵蓋理論、核心概念及代碼實踐。理論部分包括線性模型&#xff08;向量表示、廣義線性模型&#xff09;、分類與回歸的區別、梯度下降&#xff08;批量/隨機/小批量&#xff09;、激活函數&#xff08;Sigmoid、ReLU等&…

如何用算力魔方4060安裝PaddleOCR MCP 服務器

在當今數字化快速發展的時代&#xff0c;OCR&#xff08;光學字符識別&#xff09;技術已經成為從圖像中提取文本信息的重要工具。無論是在自動化辦公、智能文檔處理還是在內容創作領域&#xff0c;OCR 技術的應用都極大地提高了工作效率和準確性。本文將詳細介紹如何利用算力魔…

Azure的遷移專業服務是怎么提供的

好的&#xff0c;這是一個非常實際的問題。Azure的遷移專業服務&#xff08;Professional Services for Migration&#xff09;并非一個單一的“產品”&#xff0c;而是一個由微軟及其龐大的合作伙伴生態系統共同提供的、基于成熟方法論的綜合服務框架。其提供方式可以概括為&a…

Seaborn數據可視化實戰:Seaborn入門-環境搭建與基礎操作

Seaborn環境搭建與配置 學習目標 本課程將指導學員如何在不同的操作系統&#xff08;Windows, macOS, Linux&#xff09;上安裝Seaborn庫&#xff0c;以及如何配置Python環境&#xff0c;包括使用Jupyter Notebook和Spyder等集成開發環境&#xff08;IDE&#xff09;的基本操作…

Windows下RabbitMQ完整安裝指南

一、RabbitMQ 簡介 RabbitMQ 是一款基于 Erlang 語言開發的開源消息隊列中間件&#xff0c;實現了高級消息隊列協議&#xff08;AMQP&#xff09;。其最初起源于金融系統&#xff0c;專為分布式系統中的消息存儲與轉發設計&#xff0c;在可靠性、擴展性和高可用性方面表現卓越…