goland編寫go語言導入自定義包出現: package xxx is not in GOROOT (/xxx/xxx) 的解決方案

問題

寫了個自定義的包 calc.go,在路徑 $GOPATH/go_project/src/demo_51_package/com/目錄下,其中main.go 是main方法的入口
在這里插入圖片描述

代碼

main.go 代碼如下
package main
import "demo_51_package/com"
func main() {add := calc.Add(1, 2)println(add)
}
calc.go代碼如下
package calc
/*** 首字母大寫才能別其他的包使用*/
func Add(x int,y int)(int){return x + y
}

運行

當我運行時出現了以下錯誤

package demo_51_package is not in GOROOT (/Users/yexindong/Documents/go_root_path/go/src/demo_51_package)

看圖吧,跟上面的 字一樣的
在這里插入圖片描述
這個錯誤告訴你項目demo_51_package不在go的根目錄中,導入包名是從$GOPATH/src/后開始計算的,使用/進行路徑分隔。但我看自己的導入包并沒有錯,這是怎么回事呢?

原因

是GOPATH的問題嗎?

一開始以為是GOPATH的問題,配置了idea的GOPATH后,發現還是一樣,為此就可證明不是GOPATH的問題,先瞥一眼GOPATH的配置(這個配置是正確的?
在這里插入圖片描述
和go的環境變量中的GOPATH是可以對得上的,通過go env命令查看
在這里插入圖片描述

原來是go mod的原因

通過查找資料,發現是go mod的原因,并且我電腦上的go mod默認是開啟的,通過命令go env查看go的環境變量,輸入命令后會打印好多行的內容,這里我們只關注以下這一行的配置,就是gomod的狀態,發現是開啟的

GO111MODULE="on"

那么問題來了。什么是go mod呢?

go mod 是什么

Go.mod是Golang1.11版本新引入的官方包管理工具用于解決之前沒有地方記錄依賴包具體版本的問題,方便依賴包的管理,可以理解為java中的maven;談到maven就熟悉了,其實就是依賴管理的工具嘛,可以用來控制依賴的版本;

最早的時候,Go所依賴的所有的第三方庫都放在GOPATH這個目錄下面,下載的依賴包也沒有版本概念,這就導致了同一個庫只能保存一個版本的代碼。如果不同的項目依賴無法依賴同一個第三方的庫的不同版本,并且,代碼開發必須在go path src目錄下。這在實際開發中造成許多的問題。

解決方案

方案一:關閉go mod

這個方案非常簡單,只需要在命令行輸入以下命令即可

go env -w GO111MODULE=off

方案二:將項目轉為module(模塊)

進入項目目錄demo_51_package下,輸入以下2個命令

# 初始化模塊-- init 后面的名稱一定要和項目目錄相同
go mod init demo_51_package# 下載依賴包
go mod tidy

執行后會發現,項目下多了個go.mod的文件
在這里插入圖片描述
這個文件內容也非常簡單,只有2行數據

module demo_51_packagego 1.17

在次運行

配置完成后,在編譯并執行main方法,發現已經可以正常運行了
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91415.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91415.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91415.shtml

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

相關文章

HLS視頻切片音頻中斷問題分析與解決方案

HLS視頻切片音頻中斷問題分析與解決方案 問題背景 在使用FFmpeg進行HLS視頻切片并通過hls.js前端播放時,開發者經常遇到一個典型問題:第一個視頻切片播放正常且有聲音,但后續切片卻突然失去音頻。這種現象在直播和點播場景中均有出現&#xf…

【Linux網絡編程】網絡層協議 - IP

目錄 背景補充 協議頭格式 IP報文的分片與組裝 網段劃分 網段劃分是什么?為什么要進行網段劃分? 怎么進行網段劃分? 路由 路由表生成算法 背景補充 假設現在主機B要給主機C發送消息。在我們前面的學習中,一直都是將數據拷…

從“救火”到“先知”:潤建曲尺運維大模型如何重構網絡運維價值鏈

“7月18號,北京,晴,最高溫度38攝氏度。”天氣預報緩緩播報,商場、地鐵、辦公樓無不歌頌著威利斯開利的貢獻,但這份涼爽的背后,離不開 “電” 的無聲托舉。5G毫秒級下載、絲滑的移動支付、智能電表、智能家居…

Element表格單元格類名動態設置

在 Element UI 的 el-table 組件中,cell-class-name 屬性用于動態自定義表格單元格的 CSS 類名,通常用于根據數據條件設置樣式。1. 基本用法在 el-table 上綁定 :cell-class-name 屬性,值為一個函數。該函數接收一個對象參數,返回…

利用容器適配器實現stack和queue外加deque的介紹(STL)

文章目錄前言什么是容器適配器?觀察庫中的源碼那么該如何使用容器適配器呢?deque的簡單介紹(了解)deque的原理介紹deque的優缺為什么選擇deque作為stack和queue的底層默認容器?(重點)利用容器適配器實現我們自己的棧和…

【因子動物園巡禮】第12章:機器學習在因子投資中的應用(中文翻譯)

【因子動物園巡禮】第12章:機器學習在因子投資中的應用(中文翻譯)第12章 因子投資中的機器學習12.1 量化金融中的人工智能12.2 量化因子投資的AI化組件:解剖學視角12.2.1 數據源拓展與預處理12.2.2 因子研究12.2.3 因子模型12.2.4…

【Golang】用官方rate包構造簡單IP限流器

文章目錄使用 Go 實現基于 IP 地址的限流機制什么是 IP 限流?基于 rate.Limiter 實現 IP 限流1. 設計思路2. 代碼實現3. 限流中間件4. 在 Gin 中使用中間件代碼解釋使用 Go 實現基于 IP 地址的限流機制 在高流量的服務中,限流是一個至關重要的環節。它不…

力扣 Pandas 挑戰(6)---數據合并

本文圍繞力扣的Pandas簡單題集,解析如何用Pandas完成基礎數據處理任務,適合Pandas初學者學習。題目1:1050. 合作過至少三次的演員和導演題目描述:ActorDirector 表:---------------------- | Column Name | Type | …

隨筆之TDengine基準測試示例

文章目錄一、基本信息二、基準測試策略三、基準測試過程1. 模擬高并發寫入場景2. 模擬并發查詢場景四、基準測試結論一、基本信息 TDengine 版本:3.3.6.13(目前最新版本)服務器配置:16核CPU,32GB內存,高IO…

【IQA技術專題】DISTS代碼講解

本文是對DISTS圖像質量評價指標的代碼解讀,原文解讀請看DISTS文章講解。 本文的代碼來源于IQA-Pytorch工程。 1、原文概要 以前的一些IQA方法對于捕捉紋理上的感知一致性有所欠缺,魯棒性不足。基于此,作者開發了一個能夠在圖像結構和圖像紋…

2024年SEVC SCI2區,一致性虛擬領航者跟蹤群集算法GDRRT*-PSO+多無人機路徑規劃,深度解析+性能實測

目錄1.摘要2.算法背景3.GDRRT*-PSO與虛擬領航者跟蹤算法4.結果展示5.參考文獻6.算法輔導應用定制讀者交流1.摘要 隨著無人機技術的快速發展及其卓越的運動和機動性能,無人機在社會和軍事等諸多領域得到了廣泛應用。多無人機協同作業,能夠顯著提升任務執…

鏈特異性文庫是什么?為什么它在轉錄組測序中越來越重要?

鏈特異性文庫是什么?為什么它在轉錄組測序中越來越重要? 在現代分子生物學研究中,RNA測序(RNA-seq) 是一種廣泛應用的技術,用于分析基因在不同條件下的表達情況。而在RNA-seq的眾多技術細節中,有…

ClickHouse vs PostgreSQL:數據分析領域的王者之爭,誰更勝一籌?

文章概要 作為一名數據架構師,我經常被問到一個問題:在眾多數據庫選擇中,ClickHouse和PostgreSQL哪一個更適合我的項目?本文將深入探討這兩種數據庫系統的核心差異、性能對比、適用場景以及各自的優缺點,幫助您在技術選…

面向對象系統的單元測試層次

面向對象系統的單元測試層次面向對象(Object-Oriented, OO)編程范式引入了封裝、繼承和多態等核心概念,這使得傳統的、基于函數的單元測試方法不再充分。面向對象系統的單元測試必須適應其獨特的結構和行為特性,從單一方法擴展到類…

如何用USRP捕獲手機信號波形(上)系統及知識準備

目錄: 如何用USRP捕獲手機信號波形(上)系統及知識準備 如何用USRP捕獲手機信號波形(中)手機/基站通信 如何用USRP捕獲手機信號波形(下)協議分析 一、手機通信參數獲取 首先用Cellular-z網絡…

C語言-數組:數組(定義、初始化、元素的訪問、遍歷)內存和內存地址、數組的查找算法和排序算法;

本章概述思維導圖:C語言數組在C語言中,數組是一種固定大小的、相同類型元素的有序集合,通過索引(下標)訪問。數組數組:是一種容器,可以用來存儲同種數據類型的多個值;數組特點&#…

河南萌新聯賽2025第(二)場:河南農業大學(補題)

文章目錄前言A.約數個數和整除分塊(相當于約數求和)相關例題:取模B.異或期望的秘密二進制的規律相關例題累加器小藍的二進制詢問乘法逆元1. 概念2.基本定義3.費馬小定理1.定理內容2.重要推論D.開羅爾網絡的備用連接方案E.咕咕嘎嘎!!!(easy)I.猜數游戲(easy)K.打瓦M.…

常見中間件漏洞

一、TomcatTomcat put方法任意文件寫入漏洞環境搭建,啟動時端口被占用就改yml配置文件,改成8081端口。(我這里是8080)cd vulhub-master/tomcat/CVE-2017-12615 docker-compose up -d 去抓包,改成put提交。下面的內容是用哥斯拉生成的木馬文件…

27.(vue3.x+vite)以pinia為中心的開發模板(監聽watch)

效果截圖 代碼實現: HelloWorld.vue <template><div style="padding: 20px">介紹:<br />1:使用統一的 watch 來監聽store的值。<br

Jenkins 詳解

Jenkins 是一個開源的持續集成和持續交付(CI/CD)工具&#xff0c;用于自動化軟件開發過程中的構建、測試和部署階段。以下是關于 Jenkins 的詳細介紹&#xff1a; 1. Jenkins 核心概念 1.1 持續集成(CI) 開發人員頻繁地將代碼變更提交到共享倉庫每次提交都會觸發自動構建和測試…