当前位置: 首页 > news >正文

‘go install‘ requires a version when current directory is not in a module

背景

安装好环境之后,跑个helloworld看看

目录结构

workspacepathsrchellohelloworld.go

代码:

package mainimport "fmt"func main() {  fmt.Println("Hello World")
}

1.使用 go run 命令 - 在命令提示符旁,输入 go run workspacepath/src/hello/helloworld.go

上述命令中的 workspacepath 应该替换为你自己的工作区路径(Windows 下的 C:/Users/YourName/go,Linux 或 Mac 下的 $HOME/go)。

在控制台上会看见 Hello World 的输出。

2.使用 go install 命令 - 运行 go install hello,接着可以用 workspacepath/bin/hello 来运行该程序。

上述命令中的 workspacepath 应该替换为你自己的工作区路径(Windows 下的 C:/Users/YourName/go,Linux 或 Mac 下的 $HOME/go)。

当你输入 go install hello 时,go 工具会在工作区中搜索 hello 包(hello 称之为包)。接下来它会在工作区的 bin 目录下,创建一个名为 hello(Windows 下名为 hello.exe)的二进制文件。运行 go install hello 后,其目录结构如下所示:

workspacepathbinhellosrchellohelloworld.go

go install指令作用于文件夹,go语言称之为“包”。

接下来聊聊遇到的报错

使用 go 1.18,在 src 文件夹执行指令时出现该报错:
go: 'go install' requires a version when current directory is not in a module
在这里插入图片描述
按照提示继续执行 go install hello@latest,报另一个错:
missing dot in first path element
在这里插入图片描述
从go 1.17 开始,官方用 go install 代替 go get 安装依赖。我的版本是 go 1.18 。显然我这里跟更新依赖没关系,我只想单纯打包一下。

看了下官方教程,只教了 go run

官方的教程只用 go run
在这里插入图片描述
在这里插入图片描述

这里提供一个解决方法:

  1. 进入 hello 文件夹,生成 go.mod
cd hello go mod init 

输出 go: creating new go.mod: module hello,同时 hello 文件夹内新增 go.mod 文件

  1. 在hello文件夹内执行 go install
go install 或者指定模块名go install hello 

注意,模块名一定要对应 go.mod 文件内的 module name 。

如果不对应,会报错。比如

go.mod 文件用 hello1

module hello1go 1.18

那么执行 go mod hello 会报错 package hello is not in GOROOT

  1. 执行成功之后,你会看到 $GOPATH/bin 目录中生成hello,并且是可以运行输出的
cd $GOPATH/bin/
./hello 

至此问题解决。

总结:

  1. module name 和 文件夹名称是解耦的,文件夹名可以是 hello123,module name 取 hello 也可
  2. go install xxx ,一定要和 module name 对应;bin目录生成文件的命名也是 module name

希望对你有帮助

完。

http://www.lryc.cn/news/56037.html

相关文章:

  • 蓝桥杯嵌入式第十三届(第二套客观题)
  • FFmpeg进阶:各种输入输出设备
  • 使用Shell笔记总结
  • 反常积分的审敛法
  • python实战应用讲解-【numpy专题篇】numpy常见函数使用示例(十三)(附python示例代码)
  • Java设计模式(十九)—— 桥接模式
  • 多线程并发安全问题
  • P1005 [NOIP2007 提高组] 矩阵取数游戏
  • 百度云【人脸识别】
  • 强化模板模块
  • Vue.js学习详细课程系列--共32节(6 / 6)
  • 【TFT屏幕】1.44寸彩屏
  • vue3组合式api
  • Maven高级-私服
  • 网络优化小结
  • Android 11.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(一)
  • 个人练习-Leetcode-1942. The Number of the Smallest Unoccupied Chair
  • EMC经典问答85问(59-62问)
  • Java面向对象 - 封装、继承和多态的综合练习(答案+知识点总结)第1关:封装、继承和多态进阶(一)+ 第2关:封装、继承和多态进阶(二)
  • 小迪安全day20WEB漏洞-文件上传之基础及过滤方式
  • LeetCode236.最近的公共祖先
  • 【springcloud 微服务】Spring Cloud Alibaba整合Sentinel详解
  • ASP医院管理系统—病历管理系统的设计与实现
  • 【蓝桥杯】动态规划(dp)入门!| 入门动态规划的正确方式! ——学习笔记
  • 元宇宙与网络安全
  • Pod控制器之hpa
  • 发现一个白嫖GPT4.0的方法!真的是完胜3.5!
  • 数据结构之第四章、ArrayList和顺序表
  • webase全家桶搭建教程过程记录+bug解决
  • openEuler Linux 部署 HadoopHA