关于go环境配置问题记录

一般我们在官网下载安装好go,并且将go的安装文件下的bin目录加入环境变量path中之后,还是是不能直接使用的,需要对它的虚拟环境进行一些配置以及进行一些操作

本文主要分为两个部分:

  • 一、常见环境变量配置
  • 二、使用go mod 进行项目进行常见操作

一、常见环境变量配置

1. 查看go虚拟环境
按住win+R键,输入cmd,进入shell命令行,键入

go env

就能查看当前环境的配置,其中里面有几个参数需要进行了解并设置

2. 配置 GO111MODULE

GO111MODULE环境变量主要是用来开启或关闭模块支持的。它有三个可选值:off、on、auto,默认值是 auto。

  • GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。通常go的老版本就是这样子的
  • GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。
  • GO111MODULE=auto 在 $GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。

在使用模块的时候,GOPATH 是无意义的,不过它还是会把下载的依赖储存在 $GOPATH/src/mod 中,也会把 go install 的结果放在 $GOPATH/bin 中。通常现在新版本一般我们是需要使用模块的,所以需要将其设为on

go env -w GO111MODULE=on

3. 配置GOPATH
GOPATH 环境变量是Go项目的工作目录。如果你的项目路径是在:D:\go_module目录下进行的,go目录下一般有以下三个子目录,分别是:src、pkg 和 bin。在环境变量里可进行设置,如我的电脑这样子设置的:
变量名: GOPATH
变量值: D:\go_module
GOPATH用于:

  • 保存编译后的二进制文件。
  • go get和go install命令会下载go代码到GOPATH。
  • import包时的搜索路径
    使用GOPATH时,GO会在以下目录中搜索包:
    GOROOT/src: 该目录保存了Go标准库代码。
    GOPATH/src: 该目录保存了应用自身的代码和第三方依赖的代码。
    假设程序中引入了如下的包:
    import “Go-Player/src/chapter17/models”
    第一步:Go会先去GOROOT的scr目录中查找,很显然它不是标准库的包,没找到。
    第二步:继续在GOPATH的src目录去找,准确说是GOPATH/src/Go-Player/src/chapter17/models这个目录。如果该目录不存在,会报错找不到package。在使用GOPATH管理项目时,需要按照GO寻找package的规范来合理地保存和组织Go代码。

4. 配置GOROOT
GOROOT是Go的安装路径,一般我们都会自己指定。注意一个问题:GOROOT和GOPATH的值不要相同,即不要设置在同一个目录下

5. 配置GOPROXY
Go默认的GOPROXY的值是:GOPROXY=https://proxy.golang.org,direct。这个goproxy在使用go get安装第三方库的时候会报错,导致无法下载成功(防火墙原因)。所以必须要修改一下,通常我们会加一些国内可以使用的镜像:
变量名: GOPROXY
变量值: https://goproxy.cn,direct (这个镜像最近不知道怎么回事用不了,显示500,终端服务器出错),还可以换成别的镜像,中间用逗号隔开就行(Windows下的格式,具体以系统类型为准)。别的镜像有:

  • https://goproxy.io,direct (这个可用)
  • https://mirrors.aliyun.com/goproxy(20230214试验不成功)

二、使用go mod 进行项目进行常见操作

- go mod初始化项目

go mod init 模块名
  • Go mod 下载到本地Cache
go mod download
  • Go mod 清理本地Cache
go clean -modcache

- 删除错误或者不使用的modules

go mod tidy
  • 生成vendor目录
go mod vendor
  • 验证依赖是否正确
go mod verify
  • 查找依赖
go mod why
  • 更新依赖到最新版本
go get -u github.com/golang/protobuf
  • 更新到指定版本
go get -u github.com/golang/protobuf@指定版本
  • 查看有哪些版本
go list -m -versions github.com/golang/protobuf

- 下载包时常用go get 或者go install
网站 pkg.go.dev 可下载go所需要的包,在里面找到所需包,然后可以使用go get 下载

go get 包名

也可以使用go install

go install 包名

- go get与go install的区别

- go get: 对 go mod 项目,添加,更新,删除 go.mod 文件的依赖项(仅源码)。不执行编译。侧重应用依赖项管理。
- go install: 在操作系统中安装 Go 生态的第三方命令行应用。不更改项目 go.mod 文件。侧重可执行文件的编译和安装。

注:

  • 自 Go 1.17 起, 弃用 go get 命令安装可执行文件,使用 go install 命令替代.
  • 自Go 1.18起,go get 命令不再有编译包的功能。将只有添加,更新,移除 go.mod 文件中的依赖项的功能。
  • go get 命令将默认启用 -d 选项。
  • Go 1.17 之前:go get 通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。实际分成两步操作:1. 下载源码包,2. 执行 go install。
  • Go 1.17 之后: 弃用go get命令的编译和安装功能
  • 由于 go 1.11 之后 go mod modules特性的引入,使得go get 命令,既可以安装第三方命令,又可以从 go.mod 文件自动更新项目依赖。但多数情况下,开发者只想做二者之一。
  • 自 go 1.16 起,go install 命令,可以忽略当前目录的 go.mod文件(如果存在),直接安装指定版本的命令行应用。
  • go get 命令的编译和安装功能,因为和 go install 命令的功能重复,故被弃用。由于弃用了编译和安装功能,go get 命令将获得更高的执行效率, 也不会在更新包的时候,再出现编译失败的报错。
  • go get 由于具备更改 go.mod 文件的能力,因此我们 必须要避免执行 go get 命令时,让它接触到我们的 go.mod 文件 ,否则它会将我们安装的工具作为一个依赖。
  • 如果不是为了更新项目依赖,而是安装可执行命令,请使用 go install

你可能感兴趣的:(软件配置及基本操作,golang,开发语言)