描述:

在学习golang的过程中,在$GOPATH/src/github.com/xxx/hello目录下执行go build和go test都会报下面的错误

go: cannot find main module; see ‘go help modules’

解决方案:

由于之前设置过GO111MODULE=on,所以使用下面的命令解决

$ go mod init hello

原因:

之前为了提高依赖包的下载速度,使用了goproxy
然后开启的时候使用了以下命令

$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct

这使得go默认管理依赖的方式变成了go module模式,即依赖一个go.mod文件,其中描述了项目依赖的包和版本(类似于npm package.json,maven的pom.xml)

而目录中没有go.mod文件,所以go不知道主模块是什么,所以无法编译

深入探究

go语言在诞生之时,没有提供随之的包管理工具,而是使用go get来下载依赖包,并放在$ GOPATH / src下,并且没有使用版本控制,以为着每次都会拉取master分支的代码,软件包的代码放在src/github.com/xx/xx下面

而Go 1.11之后的版本引入了Go模块(Go Modules),Go Modules使用go.mod中标记的软件包的版本,软件包的代码放在pkg/mod下面

使用Go Modules还是GOPATH

go使用一个环境变量GO111MODULE来决定使用Go Modules还是GOPATH,该变量有三个值,并在不同版本下有不同的语义

1.11&1.12 1.13
GO111MODULE = on 不管在GOPATH 中还是外,都强制使用go.mod 不管在GOPATH 中还是外,都强制使用go.mod
GO111MODULE = off 强制 Go 表现出 GOPATH 方式,即使在 GOPATH 之外 强制 Go 表现出 GOPATH 方式,即使在 GOPATH 之外
GO111MODULE = auto 在GOPATH外时,GO111MODULE = on,在GOPATH内时,GO111MODULE = off 当有go.mod或者在GOPATH 之外,GO111MODULE = on,当处于 GOPATH 内且没有 go.mod 文件时,GO111MODULE = off

解决go build报错cannot find main module; see ‘go help modules‘相关推荐

  1. 解决Python模块报错:ModuleNotFoundError: No module name 'StringIO'

    下面是我在学习中遇到的问题,给大家分享一下: ''' 这里是测试代码 ''' # coding = utf-8 from selenium import webdriver from selenium ...

  2. 一种解决Android studio 3.0 Build报错的方法

    一种解决Android studio 3.0 Build报错的方法 参考文章: (1)一种解决Android studio 3.0 Build报错的方法 (2)https://www.cnblogs. ...

  3. Eclipse中更改JDK版本,解决ant编译报错的问题

    要改一个JDK版本 主要是为了解决ant编译报错,JDK版本不一致的问题. 1. Windows--Preferences--Java--Compiler(配置的为1.8)--Installed JR ...

  4. 解决Spring Boot报错Mapped Statements collection already contains value for...Error while adding the mapp

    解决Spring Boot报错Mapped Statements collection already contains value for...Error while adding the mapp ...

  5. 解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错

    解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错 问题描述:   笔者将一个在 Tomcat ...

  6. 解决IntelliJ IDEA报错Error: java: 错误: 不支持发行版本 XX

    解决IntelliJ IDEA报错Error: java: 错误: 不支持发行版本 XX 解决方法 1 解决方法 2 解决方法 3   笔者在做代码重构的时候,以前记得运行正常的代码,如今一直报错,百 ...

  7. packer build 报错 无任何输出 一直报“skipping line: 1 skipping line: 2 skipping line: 3.....”

    最近使用packer build 报错 无任何输出 一直报"skipping line: 1 skipping line: 2 skipping line: 3....." , 解 ...

  8. npm run build报错Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of

    在react项目执行 npm run build 报错 Ineffective mark-compacts near heap limit Allocation failed - JavaScript ...

  9. 快速解决Android编译报错 : Manifest merger failed with multiple errors, see logs

    快速解决Android编译报错 : Manifest merger failed with multiple errors, see logs 编译项目的时候,遇到Android Manifest合并 ...

最新文章

  1. java预编译啥意思_java预编译 java jdbc 预编译语句和普通语句的区别
  2. linux 查看 特定进程 内存
  3. 面状县级行政区划转地级行政区划,并关联属性字段
  4. [Linux环境]-centos7下安装jdk1.8.0_141流程.
  5. 一起来学ES —— 浅谈Nested结构
  6. 产品运营 跨境支付_餐饮网店的运营 跨境支付哪个平台最好
  7. 怎么用python编写个apk_新手用tkinter写了一个APK提取工具
  8. MYSQL执行计划EXPLAIN
  9. 跟着例子一步步学习redux+react-redux[转载]
  10. 计算机维修七方法,七种常用方案解决电脑没声音故障
  11. cdev 结构体、设备号相关知识解析
  12. 如何用BIGEMAP在Arcgis中使用bigemap制作特定比例尺的交通位置图
  13. 如何用u盘给惠普服务器安装系统,如何用u盘装惠普系统教程
  14. 时间去哪儿了?--读《时间简史》有感
  15. 《Google软件测试之道》读书笔记---第一章
  16. 这12首极短的诗歌,有极大的魅力
  17. 关于依赖注入和依赖属性
  18. 惠普笔记本重装系统按哪个键
  19. CSS Sprite
  20. 1677. 发票中的产品金额

热门文章

  1. Monthly Expense【二分】
  2. 《iOS 6核心开发手册(第4版)》——2.11节秘诀:构建星星滑块
  3. android emulator虚拟设备分析第三篇之pipe上的qemud service
  4. 安装Exchange 2010 时报错UserMailbox 必须强制使用 Database
  5. Sql Server中自动序号的方法
  6. if语句写阶跃函数C语言,C语言第四章分支语句.ppt
  7. java占位符填充_Java使用freemark生成word
  8. 深入理解== 和 equals 的区别
  9. PMO在组织结构中的作用
  10. [转载] Java中的命名参数