GOPATH、GOROOT(VSCode编写第一个go程序)

1. GOROOT和GOPATH

GOROOTGOPATH 都是 Go 语言中的环境变量,用于指定 Go 工具链和工作区的路径。

GOROOT 指定了 Go 工具链的安装路径,它包含了 Go 语言的标准库、编译器等工具。在使用 Go 编译器、运行时等工具时,它们会默认从 GOROOT 中查找相关的文件。一般情况下,我们不需要修改 GOROOT 的值,除非你需要使用不同版本的 Go 工具链。

GOPATH 指定了 Go 语言工作区的路径,它包含了你的项目源代码、依赖库以及编译后的可执行文件等。在使用 Go 工具链时,它们会默认从 GOPATH 中查找相关的文件。如果你的项目依赖了第三方库,那么这些库也会被下载到 GOPATH 目录下。在使用 Go Modules 进行依赖管理时,GOPATH 的作用会被降低,因为 Go Modules 可以将依赖库放在任何地方,不需要将其放在 GOPATH 目录下。

总之,GOROOTGOPATH 都是 Go 语言中非常重要的环境变量,它们对于正确配置 Go 工具链和工作区非常重要。

2. GOPATH

GOPATH 是一个环境变量,用于指定 Go 语言工作区的路径。在 GOPATH 中包含了三个重要的目录:srcbinpkg。其中,src 目录是用于存放 Go 语言源代码的目录,bin 目录是用于存放编译后的可执行文件的目录,pkg 目录是用于存放编译后的库文件的目录。

GOPATH 的作用是告诉 Go 工具链在哪里查找你的项目源代码和依赖库。如果你的项目不在 GOPATH 目录下,那么你需要将你的项目复制到 GOPATH/src 目录下,或者设置 GO111MODULE=on,使用 Go Modules 进行依赖管理。如果你使用 Go Modules 进行依赖管理,那么你可以将你的项目放在任何地方,不需要将其复制到 GOPATH/src 目录下。

3. vscode安装go插件后,编写代码弹出来的安装模块选择全部安装即可

  • 全部安装成功
    在这里插入图片描述
  • 安装成功后会在我们的GOPATH路径下下载到相关的可执行文件和库文件
    在这里插入图片描述

4. vscode中显示package引用包“报错”

在这里插入图片描述

gopls requires a module at the root of your workspace.
You can work with multiple modules by upgrading to Go 1.18 or later, and using
go workspaces (go.work files).
See the documentation for more information on setting up your workspace:
https://github.com/golang/tools/blob/master/gopls/doc/workspace.md.
  • 这个“报错”并不是“‘报错”,不会影响程序的正常运行
    主要是因为我的GOPATH和工作目录不再同一目录下,有很多网友说的可以打开文件—> 首选项—> 设置—> 扩展—> go—> Alternate Tools—> 编辑settings.json ,这里添加
"gopls": {
    "experimentalWorkspaceModule": true
},
  • 我这里是行不通的,照样报错
  • 不行,不行,不行

5. 使用 Go Modules 管理

  • 最大的好处就是我的项目可以放在任意位置
    vscode打开控制台在项目下执行go mod init <项目路径>,例如我的项目路径是D:/goproject:

  • 执行go mod init goproject
    在这里插入图片描述

  • 可以看到在我的项目底下生成了一个go.mod文件,里面放的是我的项目名称和go版本,其实这个文件还有更多作用,感兴趣的可以去多多了解,也可以达到评论区一块学习交流

  • 这个文件也可以自己手动添加不用命令

module goproject

go 1.17

6. go.mod文件

是的,使用 go mod init goproject 命令会在当前目录下生成一个名为 go.mod 的文件。这个文件是 Go Modules 的描述文件,它包含了你的项目名称、版本号以及依赖库等信息。

在你的项目中使用 Go Modules 进行依赖管理时,你可以在 go.mod 文件中声明你的项目所依赖的第三方库,然后使用 go buildgo test 等命令自动下载并管理这些依赖库。这样可以方便地管理你的项目依赖,并且可以避免由于依赖库版本不一致而导致的编译错误等问题。

除了 go.mod 文件之外,使用 go mod init 命令还会生成一个名为 go.sum 的文件。这个文件用于记录你的项目所依赖的第三方库的具体版本和哈希值等信息,以确保每个人在构建你的项目时都使用相同的依赖库版本。

7、添加依赖包到GOPATH中

在这里插入图片描述

could not import k8s.io/client-go/tools/clientcmd (cannot find package “k8s.io/client-go/tools/clientcmd” in GOROOT or GOPATH)
没有在我的GOROOT或者GOPATH中找到包

  • 使用go get 命令来安装包到我的GOPATH中
go get k8s.io/client-go

这个命令会自动下载 k8s.io/client-go 包,并将其放置在 GOPATH/src 目录下。如果环境变量 $GOPATH/bin 在 $PATH 中,那么这个命令还会将可执行文件添加到 $GOPATH/bin 目录下,以便可以直接在命令行中使用这个工具。

  • 由于我的环境中k8s版本是1.19.9版本,根据官网https://github.com/kubernetes/client-go版本对应关系,选择v0.19.0
    在这里插入图片描述
go get k8s.io/client-go@v0.19.9

在这里插入图片描述

PS D:\goproject> go get k8s.io/client-go@v0.19.9
go: can only use path@version syntax with ‘go get’ and ‘go install’ in module-aware mode

  • 这个错误提示说明w我正在使用 Go Modules 进行依赖管理,而且我不能在模块中使用 path@version 语法来指定依赖库的版本。
GO111MODULE=off go get k8s.io/client-go@v0.19.9
  • 这个命令会将 Go Modules 关闭,然后使用旧的 GOPATH 模式来下载 k8s.io/client-go@v0.19.9 包。注意,这个命令会将包下载到 $GOPATH/src 目录下,而不是在当前模块的 vendor 目录中。
  • 如果你想在模块中使用 path@version 语法来指定依赖库的版本,你需要将你的项目初始化为 Go Modules,并且在你的项目根目录下创建一个名为 go.mod 的文件。你可以执行以下命令来初始化 Go Modules:
go mod init goproject
  • 然后,你可以在你的代码中使用 import "k8s.io/client-go@v0.19.9"来声明依赖。注意,这个命令会将包下载到当前模块的 vendor 目录中。

PS D:\goproject> go mod init goproject
go: modules disabled by GO111MODULE=off; see ‘go help modules’

表明你的Go语言环境中的GO111MODULE环境变量被设置为"off",禁用了Go模块功能。
要解决这个问题,你可以尝试以下方法:

  1. 确保你的Go语言版本是1.11或更新的版本,因为Go模块功能在1.11版本中才被引入。
  2. 检查并确保你的工作目录不是在GOPATH之下,因为Go模块功能不适用于GOPATH模式。你可以使用go env命令来查看GOPATH的值,如果它指向了你的当前工作目录,则需要将工作目录移动到GOPATH之外。
  3. 如果你在命令行中使用了set GO111MODULE=on命令,但没有生效,可能是因为你的操作系统或终端环境不同导致的。你可以尝试使用不同的命令来设置环境变量:
    在Windows命令提示符下:setx GO111MODULE on
    在Windows PowerShell下:$env:GO111MODULE = "on"
    在Linux或MacOS终端下:export GO111MODULE=on
  4. 请注意,这些命令设置的环境变量可能在当前会话中生效,但在新的终端会话中可能会失效。如果你希望持久保存环境变量的设置,你需要将它们添加到你的操作系统配置文件(例如.bashrc或.bash_profile)中。
    在这里插入图片描述
  • 成功执行
    在这里插入图片描述
  • 执行go mod tidy命令

你的导入语句自动更新go.mod文件并下载缺少的依赖包。确保在包含k8s.io/client-go的文件中执行该命令
这将自动下载缺少的依赖包并将它们添加到go.mod文件中。
在这里插入图片描述

# 查看依赖
go get -u
# 清理模块缓存
go clean -modcache

8、无法导入k8s.io/client-go/tools/clientcmd

could not import k8s.io/client-go/tools/clientcmd (no required module provides package “k8s.io/client-go/tools/clientcmd”)
这个错误通常意味着缺少所需的Kubernetes客户端库。请尝试使用以下命令安装所需的依赖项:

go get k8s.io/client-go/tools/clientcmd@v0.19.9

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/39119.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新晋 Committer!来自复旦大学的帅哥一枚

点亮Star⭐️ 支持我们 https://github.com/apache/dolphinscheduler 最近&#xff0c;社区星力量又迎来一位新晋 Committer&#xff0c;这次是来自复旦大学研究生在读的王维饶同学&#xff0c;一起来认识一下吧&#xff01; 个人简介 姓名&#xff1a;王维饶职位&#xff1a…

SignalTap II 软件使用步骤

文章目录 前言一、SignalTap II是什么&#xff1f;二、使用步骤三、总结四、参考资料 前言 环境&#xff1a; 1、Quartus18.1 2、板子型号&#xff1a;原子哥开拓者2(EP4CE10F17C8) 要求&#xff1a; 能够使用SignalTap II进行片上调试。 一、SignalTap II是什么&#xff1f; S…

华为云子网路由表作用及价值

子网路由表 子网路由表作用云专线、VPN的配置与子网路由表强关联&#xff0c;本质是在相应的子网路由表中添加了一条路由Nat路由表问题地址变更问题snat和dnat 子网路由表作用 子网内部作为一个二层网络&#xff0c;通过mac地址互通&#xff0c;不通过路由互通。跨子网&#x…

ASUS华硕ROG幻14 2021款GA401QM原厂Win10系统工厂模式带ASUS Recovery恢复功能

自带恢复分区、所有驱动、出厂主题壁纸LOGO、Office办公软件、奥创控制中心等预装程序 所需要工具&#xff1a;16G或以上的U盘(非必需) 文件格式&#xff1a;HDI,SWP,OFS,EDN,KIT,TLK多个底包 文件大小&#xff1a;11.34GB 注&#xff1a;恢复时会清空电脑上所有盘的数据&…

【布局优化】基于遗传算法的车间布局优化 车间设施布局优化【Matlab代码#50】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 车间布局优化2. 基于GA的布局优化模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 车间布局优化 车间设施布置的规划一直是工业工程领域不断研究和探索的内容&am…

【人工智能】xAI——“X宇宙”又增添了一位新成员

个人主页&#xff1a;【&#x1f60a;个人主页】 &#x1f31e;热爱编程&#xff0c;热爱生活&#x1f31e; 文章目录 前言xAI团队成员做解开宇宙本质的AI 前言 有人问他&#xff0c;xAI公司是干啥的&#xff1f;马斯克的回答引用了其偶像、科幻作家道格拉斯・亚当斯的话&…

[javascript核心-08] V8 内存管理机制及性能优化

V8 内存管理 V8 本身也是程序&#xff0c;它本身也会申请内存&#xff0c;它申请的内存称为常驻内存&#xff0c;而它又将内存分为堆和栈 栈内存 栈内存介绍 栈用于存放JS 中的基本类型和引用类型指针栈空间是连续的&#xff0c;增加删除只需要移动指针&#xff0c;操作速度…

leetcode100.相同的树

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;相同的树 1️⃣ 代码&#xff1a; bool isSameTree(struct TreeNode* p, struct TreeNode* q){// 判断两棵树当前结点是否为空if (p NULL && q NULL) {// 说明是相同的return true;}// 来到这里有几种情况// …

单片机第一季:零基础6——按键

目录 1&#xff0c;独立按键 2&#xff0c;矩阵按键 &#xff08;注意&#xff1a;文章中的代码仅供参考学习&#xff0c;实际使用时要根据需要修改&#xff09; 1&#xff0c;独立按键 按键管脚两端距离长的表示默认是导通状态&#xff0c;距离短的默认是断开状态&#xf…

集群基础3——haproxy负载均衡apache

文章目录 一、环境说明二、安装配置httpd三、安装配置haproxy四、验证http负载均衡五、配置https负载均衡六、haproxy网页监控6.1 监控参数详解6.2 页面操作 一、环境说明 使用haproxy对apache进行负载均衡。 主机IP角色安装服务192.168.161.131后端服务器1httpd,80端口192.168…

前端 | (五)CSS三大特性及常用属性 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 文章目录 &#x1f4da;CSS三大属性&#x1f407;层叠性&#x1f407;继承性&#x1f407;优先级 &#x1f4da;CSS常用属性&#x1f407;像素的概念&#x1f407;颜色的表示⭐️表…

【数据挖掘】如何为可视化准备数据

一、说明 想要开始您的下一个数据可视化项目吗&#xff1f;首先与数据清理友好。数据清理是任何数据管道中的重要步骤&#xff0c;可将原始的“脏”数据输入转换为更可靠、相关和简洁的数据输入。诸如Tableau Prep或Alteryx之类的数据准备工具就是为此目的而创建的&#xff0c;…

Android 开发规范(基础版)

背景 项目的代码时间时间很长,经过太多人手,代码的规范性堪忧,目前存在较多的比较自由的「代码规范」,这非常不利于项目的维护,代码可读性也不够高。 分析现有项目的代码的情况,输出的『定制化规范』文档,用于提高代码的可读性和可维护性。 收益 对于个人:帮助团队写「…

IIS 日志分析

Microsoft互联网信息服务&#xff08;IIS&#xff09;服务器&#xff0c;包括Web和FTP&#xff0c;已成为企业必不可少的。但是&#xff0c;IT 安全管理员的工作并不仅仅局限于部署 IIS 服务器。部署后&#xff0c;管理员必须采取安全措施来保护这些服务器。监视 IIS 服务器安全…

Java版知识付费源码 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台

知识付费平台主要指的是能够通过付费来满足用户知识需求的平台&#xff0c;用户可以通过该平台来消费知识或者开展知识买卖等行为。 此处的平台是一个广义的概念&#xff0c;可以是微信小程序或者论坛&#xff0c;也可以是网页或者手机APP&#xff0c;等&#xff0c;就我国的情…

基于IMX6ULL的AP3216C的QT动态数据曲线图显示

前言&#xff1a;本文为手把手教学 LinuxQT 的典型基础项目 AP3216C 的数据折线图显示&#xff0c;项目使用正点原子的 IMX6ULL 阿尔法( Cortex-A7 系列)开发板。项目需要实现 AP3216C 在 Linux 系统下的驱动&#xff0c;使用 QT 设计 AP3216C 的数据显示页面作为项目的应用层。…

聊聊ChatGPT是如何组织对话的

为什么要组织对话&#xff1f; 总所周知&#xff0c;ChatGPT的训练大致可分为下图中展示的几个阶段&#xff0c;其中&#xff0c;在Pretraining阶段&#xff0c;模型的训练数据是纯文本&#xff0c;目标是根据上文预测下一个token&#xff0c;而在后面的几个阶段中&#xff0c…

【软件测试】selenium中元素的定位

1.元素的定位 不管用那种方式&#xff0c;必须保证页面上该属性的唯一性 1.CSS 定位 CSS(Cascading Style Sheets)是一种语言&#xff0c;它被用来描述HTML 和XML 文档的表现。 CSS 使用选择器来为页面元素绑定属性。这些选择器可以被selenium 用作另外的定位策略CSS的获取可…

scrapy ---分布式爬虫

导模块 pip install scrapy-redis 原来scrapy的Scheduler维护的是本机的任务队列&#xff08;待爬取的地址&#xff09;本机的去重队列&#xff08;放在集合中&#xff09;---》在本机内存中 如果把scrapy项目&#xff0c;部署到多台机器上&#xff0c;多台机器爬取的内容是重…

静态数码管——FPGA

文章目录 前言一、数码管1、数码管简介2、共阴极数码管or共阳极数码管3、共阴极与共阳极的真值表 二、系统设计1、模块框图2、RTL视图 三、源码1、seg_led_static模块2、time_count模块3、top_seg_led_static(顶层文件) 四、效果五、总结六、参考资料 前言 环境&#xff1a; 1、…