Goland丨报错汇总
报错汇总
1. 在运行go文件的时候报错:
1 | ./string.go:9:6: main redeclared in this block previous declaration at ./slice.go:5:6 |
后来找到问题为:同一个目录下面不能有个多 package main
因为在初学,所以换文件写例子的时候,不知道不能有两个package main,我的一个目录下有两个文件里面都写了main主程序;
- 解决方案:把两个文件分开目录放;
2. 解决VSCode安装Go tools失败的问题
安装Go后,打开VS Code,按照提示安装了微软官方的GO插件。但在安装go tools时,出现了下面的一大堆错误
1 | go.toolsGopath setting is not set. Using GOPATH /Users/l2m2/go |
- 解决方案:
设置代理
1 | go env -w GO111MODULE=on |
go代理链接:
https://goproxy.io/zh/
3. 解决go build报错cannot find main module; see ‘go help modules’
描述
在学习golang的过程中,执行go build和go test都会报下面的错误1
go: cannot find main module; see ‘go help modules’
解决方案
由于之前设置过GO111MODULE=on,所以使用下面的命令解决1
go mod init hello
生成了一个
go.mod文件,然后再执行go build成功
- 原因
之前为了提高依赖包的下载速度,使用了goproxy
然后开启的时候使用了以下命令1
2go 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 |