首页 > 其他分享 >11--go mod遇到的小问题 | 青训营笔记

11--go mod遇到的小问题 | 青训营笔记

时间:2023-01-27 18:34:23浏览次数:67  
标签:11 -- work Go 模块 青训营 go 目录 mod

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

gopath 不起作用
 cannot find module providing package github.com

原因:使用代理下载go包后后,出现了找不到包的问题,后来发现若使用代理,他会去pkg包下找依赖。

解决:在使用 GOPROXY 的时候,开启了 GO111MODULE,导致包管理非官方所说的在 GOPATH\src\,而是去了 ​GOPATH\src\pkg\目录下,需要用go mod引入这些包 require github.com/gin-gonic/gin@latest ,解决import获取不了包的问题。运行:

  go mod init gin
  go mod edit -require github.com/gin-gonic/gin@latest
package main划红线

并提供了一个文档,以下进行了翻译:

设置工作区

gopls支持 Go 模块和 GOPATH 模式。但是,它需要一个定义的范围,引用、重命名和实现等语言功能应在其中运行。

以下选项可用于配置此范围:

模块模式

一个模块

如果使用单个模块,则可以打开模块根目录(包含文件的目录)、模块内的子目录或包含模块的父目录。go.mod

: 如果打开包含模块的父目录,则该目录必须包含该单个模块。否则,您将使用多个模块。

多个模块

Gopls有几种同时处理多个模块的替代方案,如下所述。从 Go 1.18 开始,Go 工作区是首选解决方案。

Go 工作区 (Go 1.18+)

从 Go 1.18 开始,该命令通过 go.work 文件原生支持多模块工作区。这些文件由以 开头的 gopl 识别。go``gopls@v0.8.0

因此,在 Go 1.18 及更高版本中处理多个模块的最简单方法是创建一个包含您要处理的模块的文件,并将工作区根目录设置为包含该文件的目录。go.work``go.work

例如,假设此存储库已签出到目录中。我们可以同时处理两者,方法是使用 创建一个文件,然后将包含文件的目录添加到工作区:$WORK/tools``golang.org/x/tools``golang.org/x/tools/gopls``go.work``go work init``go work use MODULE_DIRECTORIES...``go.mod

 cd $WORK
 go work init
 go work use ./tools/ ./tools/gopls/

...然后在我们的编辑器中打开目录。$WORK

易得原因:go module模式是分为两种的,分别是单模块和多模块

单模块是指该文件及其子目录下只能有一个go.mod文件,如果新建包或者移动到该目录下,会构成子代嵌套,依旧视为是一个module。多模块是默认关闭的,所以要手动打开,一般官方推荐的方法是采用工作区的方式,也就是为每个模块创建一个工作区文件夹,这样每个模块都会有自己的作用域,并且不会垮模块工作。

解决:

在vscode的设置-拓展-Go-Alternate Tools的setting.json中加入:

 "gopls": {     
     "experimentalWorkspaceModule": true,
 },

保存,然后重启vscode,重新导入工作文件夹即可。

go mod twice in the workspace

原因:go mod init 创建工程时,在工程目录下生成一个pkg的目录,将工程所用到的包下载此目录。而go在安装时,会在gopath的全局目录中生成一个pkg目录,因sqlite3的版本有升级,在go build时会自动下载升级的最新包,从而导致出现twice in the workspace.

解决:

1、删除工程目录下的pkg目录

2、在工程的go.sum文件中找到有两个版本的信息的组件包,删除不需要的版本信息。

3、到gopath的pkg\mod及pkg\cach目录下删除对应的版本目录。

4、重启vscode,build,会自动下载所缺的包。

version "latest" invalid: must be of the form v1.2.3

原因:新版本的包被墙了,拉不到。

解决:

手动加入被墙的包(原始包),一定要记住版本号,实在不知道的话,就试试v0.0.0,然后重新build。

标签:11,--,work,Go,模块,青训营,go,目录,mod
From: https://www.cnblogs.com/peace0218/p/17069139.html

相关文章

  • 什么是URI
    URI有两种形式:URL和URN。URL全称是UniformResourceLocator,即统一资源定位符,比较常见,而URN一般很少使用。因此很多时候说的URI就是URL。URL遵循一种标准格式,......
  • Pytorch(GPU)安装小结
    引:最近在学习神经网络的搭建与使用,需要安装Pytorch,但是在安装的过程中遇到了很多问题,在这里总计一下。1​.国内镜像源众所周知(手动狗头),Python的好多库是需要翻墙访问外网进......
  • 通用的数据自动分析方法 低代码低成本分析数据
    数据分析自动化​数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用。随着信息化的发展,数......
  • hdu:"红色病毒"问题(指数型母函数用e^x指数函数来计算)
    ProblemDescription医学界发现的新病毒因其蔓延速度和Internet上传播的”红色病毒”不相上下,被称为”红色病毒”,经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶,......
  • 【Gstreamer】GStreamer编译环境搭建
    在Ubuntu环境上安装gstreamerapt安装gstreamersudoapt-getinstalllibgstreamer1.0-devlibgstreamer-plugins-base1.0-devlibgstreamer-plugins-bad1.0-devgstreame......
  • OI线下比赛注意事项
    一些经验之谈。I.学会使用Linux虚拟机在日常生活中,我们使用的电脑系统通常是Windows,线下考场中的电脑也几乎都使用Windows系统,而Linux系统我们一般很少接触到......
  • 高斯-约旦消元法详解
    注:本文章假设读者已经学会基础的高斯消元法引入高斯约旦消元法是高斯消元法的一种,一般用于求解线性方程组。对于一个线性方程组\[\begin{cases}x+3y+4z=5\\x......
  • 如何获得整数二进制中最低位的1
    转载自https://blog.csdn.net/o_ohello/article/details/86663613可知在计算机中数是以补码的形式储存的。比如7,为111。-7为11111001。其中求解-7的补码形式我们是怎么......
  • javafx程序运行
    下载openjfxhttps://gluonhq.com/products/javafx/openjfx的LTS版本好像要付费才能下载,所以勾选“Includeolderversions”下载一个非LTS的。下载后解压到一个地方执......
  • C/C++工业数据分析与文件信息管理系统
    C/C++工业数据分析与文件信息管理系统大连理工大学《程序设计基础A课程设计》设计报告工业数据分析与文件信息管理系统学生姓名:院系、班级:学号:联系电......