【Go】Go moudle、Go 环境变量、import path XXX should not have @version问题解决

这篇具有很好参考价值的文章主要介绍了【Go】Go moudle、Go 环境变量、import path XXX should not have @version问题解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

import path XXX should not have @version

PS D:\IDES\GoLand_workspace\src\Graduation_project\echomap> go mod tidy
go: echomap/pkg/mod/github.com/!azure/go-ntlmssp@v0.0.0-20221128193559-754e69321358: import path "echomap/pkg/mod/github.com/!azure/go-ntlmssp@v0.0.0-20221128193559-754e69321358" should not have @version
go: echomap/pkg/mod/github.com/aymerick/douceur@v0.2.0: import path "echomap/pkg/mod/github.com/aymerick/douceur@v0.2.0" should not have @version
go: echomap/pkg/mod/github.com/aymerick/douceur@v0.2.0/css: import path "echomap/pkg/mod/github.com/aymerick/douceur@v0.2.0/css" should not have @version

删除pkg目录

【Go】Go moudle、Go 环境变量、import path XXX should not have @version问题解决,Golang,golang,开发语言,后端

go clean -modcache
go mod tidy

Go Path

GOPath是指Go代码文件在文件系统上的位置。在Go 1.8之前的版本中,Go使用GOPATH环境变量来指定工作区(workspace)的路径,所有的Go代码都需要放置在GOPATH下。
通过go install命令安装的包会放置在GOPATH的bin目录下。

Go 环境变量

$GOROOT 表示 Go 的安装目录,它的值一般都是 H O M E / g o ,当然也可以安装在别的地方。 ‘ HOME/go,当然也可以安装在别的地方。 ` HOME/go,当然也可以安装在别的地方。GOARCH表示目标机器(目标机器是指你打算运行你的 Go 应用程序的机器。)的处理器架构,它的值可以是 386、amd64 或 arm。 G O O S ‘ 表示目标机器的操作系统,它的值可以是 d a r w i n 、 f r e e b s d 、 l i n u x 或 w i n d o w s 。 ‘ GOOS` 表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。 ` GOOS表示目标机器的操作系统,它的值可以是darwinfreebsdlinuxwindowsGOBIN` 表示编译器和链接器的安装位置,默认是 $GOROOT/bin,如果你使用的是 Go 1.0.3 及以后的版本,一般情况下你可以将它的值设置为空,Go 将会使用前面提到的默认值。

Go 编译器支持交叉编译,也就是说你可以在一台机器上构建运行在具有不同操作系统和处理器架构上运行的应用程序,也就是说编写源代码的机器可以和目标机器有完全不同的特性(操作系统与处理器架构)。
为了区分本地机器和目标机器,可以使用 $GOHOSTOS 和 $GOHOSTARCH 设置本地机器的操作系统名称和编译体系结构,这两个变量只有在进行交叉编译的时候才会用到,如果你不进行显示设置,他们的值会和本地机器($GOOS 和 $GOARCH)一样。

$GOPATH (重点)默认采用和 $GOROOT 一样的值,但从 Go 1.1 版本开始,你必须修改为其它路径。
它可以包含多个包含 Go 语言源码文件、包文件和可执行文件的路径,而这些路径下又必须分别包含三个规定的目录:src、pkg 和 bin,这三个目录分别用于存放源码文件、包文件和可执行文件。

$GOARM 专门针对基于 arm 架构的处理器,它的值可以是 5 或 6,默认为 6。
$GOMAXPROCS 用于设置应用程序可使用的处理器个数与核数

GO111MODULE(重点):
GO111MODULE有三个值:off, on和auto(默认值)。
1、GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。(vendor目录是一个特殊的目录,它用于存放项目的所有依赖包的副本。这个目录是在Go Modules引入后出现的,其目的是为了确保项目的构建依赖是确定的,不受外部环境的影响。)
2、GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
3、GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:(1)当前目录在GOPATH/src之外且该目录包含go.mod文件(2)当前文件在包含go.mod文件的目录下面。

D:\>go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
go: stripping unprintable or unescapable characters from %"GOCACHE"%
set GOCACHE=C:\Users\AppData\Local\go-build
go: stripping unprintable or unescapable characters from %"GOENV"%
set GOENV=C:\Users\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=D:\IDES\GoLand_workspace\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=D:\IDES\GoLand_workspace
set GOPRIVATE=
set GOPROXY=https://proxy.golang.com.cn,direct
set GOROOT=E:\Go
set GOSUMDB=
set GOTMPDIR=
set GOTOOLCHAIN=
set GOTOOLDIR=E:\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.22.1
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=0
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\WINDOWS\TEMP\go-build758120991=/tmp/go-build -gno-record-gcc-switches

Go module和Go Path的关系

https://www.topgoer.com/%E5%85%B6%E4%BB%96/%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86.html

Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。
module是一组包的集合,通常对应于一个项目或库。module可以包含多个包,这些包可以被其他项目或模块导入和使用。

随着Go模块的引入,Go语言的依赖管理和代码组织方式发生了变化。Go模块提供了一种新的、更灵活的方式来管理依赖,而不再依赖于GOPATH。这意味着开发者可以在任何地方编写Go代码,而不需要将其放置在GOPATH下。

在Go模块项目中,GOPATH的作用被大大减弱,GOPATH仍然可以作为模块的存放位置,但它不再是唯一的选择。在没有使用Go模块的情况下,GOPATH仍然是必需的,用于存放和组织代码。Go工具链的一些命令,如go get,仍然使用GOPATH来搜索和安装包。
总的来说,Go模块提供了一种更加现代化和灵活的方式来管理Go代码的依赖和版本,而GOPATH则逐渐转变为一个可选的代码组织方式。随着Go语言的发展,推荐开发者使用Go模块来管理项目依赖。

Go module

https://blog.csdn.net/weixin_39003229/article/details/97638573

go.mod其实就是一个Modules,关于Modules的官方定义为:
Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性。Modules替换旧的基于GOPATH的方法,来指定使用哪些源文件。
Modules和传统的GOPATH不同,不需要包含例如src,bin这样的子目录,一个源代码目录甚至是空目录都可以作为Modules,只要其中包含有go.mod文件

    go mod download    下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
    go mod edit        编辑go.mod文件
    go mod graph       打印模块依赖图
    go mod init        初始化当前文件夹, 创建go.mod文件
    go mod tidy        增加缺少的module,删除无用的module
    go mod vendor      将依赖复制到vendor下
    go mod verify      校验依赖
    go mod why         解释为什么需要依赖

运行go get -u将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
运行go get -u=patch将会升级到最新的修订版本
运行go get package@version将会升级到指定的版本号version 如果下载所有依赖可以使用go mod download命令。

SET GOPROXY=https://goproxy.cn (这是win环境下的)
export GOPROXY=https://goproxy.cn (这是mac环境下的)

go.mod文件一旦创建后,它的内容将会被go toolchain全面掌控。go toolchain会在各类命令执行时,比如go get、go build、go mod等修改和维护go.mod文件。

go.mod 文件内提供了module, require、replace和exclude四个关键字
module语句指定模块的名字(路径)
require语句指定的依赖项模块
replace语句可以替换依赖项模块
exclude语句可以忽略依赖项模块

1、依赖的包下载到哪里了?还在GOPATH/src里吗?
不在。
使用Go的包管理方式,依赖的第三方包被下载到了$GOPATH/pkg/mod路径下。

2、可以把项目放在$GOPATH/src下吗?
可以。但是go会根据GO111MODULE的值而采取不同的处理方式,默认情况下,GO111MODULE=auto 自动模式
1.auto 自动模式下,项目在$GOPATH/src里会使用$GOPATH/src的依赖包,在$GOPATH/src外,就使用go.mod 里 require的包
2.on 开启模式,1.12后,无论在$GOPATH/src里还是在外面,都会使用go.mod 里 require的包
3.off 关闭模式,就是老规矩。文章来源地址https://www.toymoban.com/news/detail-847037.html

到了这里,关于【Go】Go moudle、Go 环境变量、import path XXX should not have @version问题解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于微信小程序警告“Do not have handler in component: pages/xxx/xxx. “的解决方法

    📚文章目录 📌关于警告 📄简单翻译一下 🎯出现原因 📝解决方法 💻测试代码 Do not have  handler in component: pages/register/register.  Please make sure that  handler has been defined in pages/register/register. 使用model:value=\\\"{{xxx}}\\\",对表单进行数据的双向绑定,绑定后,在表单输入信息是弹出警

    2024年02月11日
    浏览(53)
  • Component is not found in path “components/xxx/xxx“ (using by “pages/xxx/xxx“) 问题记录

    相信做过小程序的都遇到过Component is not found in path “components/xxx/xxx“ (using by “pages/xxx/xxx“) 这个问题,一般情况的是引用路径有问题,检查代码路径改对就好了,又或者是 分包 影响的 先说一下我得使用场景,不一定适用于所有人,只是记录一下我遇到的 1.小程序是分包的

    2024年02月02日
    浏览(50)
  • 【Linux】环境变量--PATH环境变量/环境变量的操作/命令行参数

    这里我们先提出一个问题: 为什么我们运行自己写的程序需要带路径,而系统的指令不需要带路径? 这是因为系统能找到它的位置,系统中是存在相关的环境变量,保存了程序的搜索路径的,系统中搜索可执行程序的环境变量叫做PATH。所以我们只需要把我们的程序拷贝到

    2024年02月04日
    浏览(60)
  • 解决:git repository path ‘XXX‘ is not owned by current user

    今天在拉取一个Git项目时,出现提示: 之前有同事也向我求助过,当时由于比较忙,就让他新建一个目录重新clone一下。 今天有空就花了点时间研究了一下,其实就是当前的副本目录所有权不属于当前用户。 我之前是有换过电脑,也就换了系统了,该副本是在原来的系统中

    2024年02月11日
    浏览(52)
  • Flutter 报错 Could not create task ‘xxx‘.this and base files have different roots

    遇到此问题也是先去百度了,有的说改了Gradle版本、gradle-wrapper.properties版本和ext.kotlin_version版本之后解决的,我没尝试,我用蹩脚的英语大致读了一下就不是这样说的,况且我用有道翻译了也不是这个意思啊,我不知道他们怎么改好的。 1、问题场景:此问题会出现在你的

    2024年01月23日
    浏览(37)
  • 什么是“path”环境变量?path的作用是什么?

    path的作用是指定系统在执行命令或程序时,可以在哪些文件夹中查找。path是一种环境变量,它的值是由多个文件夹路径组成的,用分号分隔。例如,如果path的值是C:Windows;C:Python;C:Program FilesJavabin,那么当用户在命令行窗口输入python或java时,系统会依次在这三个文件夹中

    2024年02月09日
    浏览(37)
  • 使用带有环境变量的path

    https://ignorantshr.github.io/person-blog/k8s/storage/volume/#3-subpath https://www.cnblogs.com/flipped/p/15855902.html https://www.bejson.com/validators/yaml_editor/ https://kubernetes.io/docs/concepts/storage/volumes/#hostpath https://learn.microsoft.com/zh-cn/visualstudio/bridge/configure-bridge-to-kubernetes https://xie.infoq.cn/article/963ca2bcbc66ff17c

    2024年02月03日
    浏览(37)
  • Mac 上更新系统PATH环境变量

    通常在安装了一些工具后,只能在安装目录下才能运行该工具。 如果想在任意目录都能访问到这个工具,我们可以把该工具的安装目录加入到系统的PATH环境变量中,这样就能在任意目录下访问了。 打开终端,将工具所在的目录添加到你的PATH环境变量中。你需要使用实际路径

    2024年02月10日
    浏览(44)
  • 解决linux环境下no XXX in java.library.path问题

    最近开发一个结合海康摄像头的sdk项目,真是狗。遇到一个问题,在windows上能跑,在linux上就一直跑不起来。 首先发现在windows上装了海康的一个叫MvCamera的软件,所以系统中是有dll文件的。于是笔者就在linux上也下载了这个软件。 当然他是一个压缩包。解压后我放到了/usr/

    2024年02月06日
    浏览(55)
  • could not import go.etcd.io/etcd/clientv3-go

    问题描述 今天在封装etcd的时候导包报错: 问题解决: get:确保下载了client包 tidy 本文由 mdnice 多平台发布

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包