Bootstrap

(一)GOROOT,GOPATH,GOMOD解析、Windows上Go环境配置、常用命令记录

一. Windows安装Go

Go语言中文网下载go的安装包:
在这里插入图片描述
下载完成之后,一直Next,选择安装路径,Finish!

查看环境变量Path,最后面会自动添加一个*****\Go\bin的目录,就说明安装没问题了!

go version #查看go版本
在这里插入图片描述

二. GOROOT、GOPATH、GOMOD

参考:GOPATH、GOROOT、GOMOD彻底搞懂golang的GOROOT和GOPATH详解GOROOT和GOPATH

1. 配置Go的两个基础环境变量,GOROOT、GOPATH

在这里插入图片描述

2. GOROOT:Go安装目录的绝对路径

在这里插入图片描述
这个目录下面也有src, bin, pkg三个文件夹,import内置包的时候,并不需要额外安装,当程序运行时,会先去GOROOT下找相应的包来运行

3. GOPATH:项目存放路径,保存go项目代码和一些第三方依赖包

GOPATH 可以设置多个,其中,第一个将会是默认的包目录,使用 go get 下载的包都会在第一个path中的src目录下,使用 go install时,在哪个GOPATH中找到了这个包,就会在哪个GOPATH下的bin目录生成可执行文件;

  • GOPATH之下主要包含三个目录:bin/pkg/src
    • bin目录主要存放可执行文件
    • pkg目录主要存放编译好的库文件,主要是*.a文件
    • src目录主要存放go的源文件
  • 缺点
    • 当我们的第三方包不是官方库时都要放在GOPATH/src下才可以使用, 不同的项目采用的第三方库是不同的版本go1.11以前是要设置多组不同的GOPATH

4. GOPMOD:包管理工具

  • Golang1.11版本新引入的官方包管理工具,用于解决之前没有地方记录依赖包具体版本的问题

4.1. 开启gomod, go env -w GO111MODULE=auto,下载下来的第三方库就在GOPATH/pkg/mod文件夹里面

  • auto
    当存在 go.mod 文件时, 其行为均会等同于于 GO111MODULE=on;
    当处于 GOPATH 内且没有 go.mod 文件存在时其行为会等同于 GO111MODULE=off;
  • on
    即使项目在您的 GOPATH 中,GO111MODULE = on 仍将强制使用 Go 模块。需要 go.mod 正常工作
  • off
    强制 Go 表现出 GOPATH 方式,即使在 GOPATH 之外。

4.2. 项目可以存放在任意位置(以下为GOPATH的目录)

  • 执行go mod init module_name, 初始化模块,module_name可填可不填,不填的话就是采用项目文件夹的名称,会在项目根目录下生成一个go.mod的文件

  • 假设我要引入github.com/gin-gonic/gin v1.5.0这个包,在go.mod中添加require github.com/gin-gonic/gin v1.5.0,然后运行go mod download即可!会生成一个和go.mod同级目录的文件go.sum,也可以不执行go mod download而直接运行go build或者go install也会自动下载包
    在这里插入图片描述

  • 如果不想自己修改go.mod,也可以直接用require指定版本,执行go get指令

    go get github.com/gin-gonic/[email protected]

    只要有开启gomod功能,go get就不会再把包放在src下的package,而是会放在/pkg/mod里面,并且mod会写好引入。也就不需要go mod download了

4.3 go.mod文件中module、require、replace和exclude 四个命令解析

  • module:指令用于声明当前模块的名称,即模块的导入路径
    # 这个指令指定了当前模块的导入路径为 example.com/myproject
    module example.com/myproject
    
  • require:指令用于声明项目所依赖的其他模块及其版本
    # 指定项目依赖的两个模块 example.com/dependency 和 example.com/anotherdependency,分别需要的版本为 v1.2.3 和 v2.0.1
    require (
        example.com/dependency v1.2.3
        example.com/anotherdependency v2.0.1
    )
    
  • replace:指令用于替换依赖模块的版本或导入路径。在开发过程中可能会用到,例如用本地修改的代码替换远程依赖库
    # 将依赖模块 example.com/dependency 的导入路径替换为本地路径 ../my/local/dependency
    replace example.com/dependency => ../my/local/dependency
    
  • exclude:指令用于排除特定版本的依赖模块。这在解决依赖冲突或避免使用某些不兼容版本时非常有用例如:
    # 指定排除依赖模块 example.com/dependency 的版本 v1.2.3
    exclude example.com/dependency v1.2.3
    

4.4 go mod命令详解

  • go mod download:下载项目中的所有依赖包。它会检查 go.mod 文件并下载缺失的依赖项。
  • go mod edit:用于编辑 go.mod 文件,可以添加、移除或更新依赖项。例如,可以使用 go mod edit -require [package]@[version] 来添加指定版本的依赖项。
  • go mod graph:生成一个文本表示的模块依赖关系图。如果想要可视化的模块依赖关系图,你可以使用第三方工具,如:Graphviz 。
  • go mod init:在当前目录初始化一个新的模块,并指定模块路径。这个命令会生成一个新的 go.mod 文件。
  • go mod tidy:清理项目中未使用的依赖项。它会根据项目代码的实际使用情况来更新 go.mod 文件,并移除不再需要的依赖项。
  • go mod vendor:将依赖项复制到项目的 vendor 目录中,以便离线使用。这个命令会创建 vendor 目录并将所有依赖项复制到该目录下。
  • go mod verify:验证项目的依赖项的完整性。它会检查依赖项的哈希值,确保其内容没有被篡改。
  • go mod why:查询某个依赖项被引入的原因。可以使用 go mod why [package] 来查找指定包的引入原因。

一些其他相关命令:

  • go get -u [package]:更新依赖。该命令用于更新指定的依赖包到最新版本。
  • go get [package]:添加依赖。该命令用于添加指定的包作为依赖,并自动更新 go.mod 文件和下载依赖包。
  • go list -m all:查看依赖。该命令用于查看当前模块的所有依赖关系。

三. 其他配置

1. go env #查询go的环境配置信息

  • GOBIN:存放可执行文件的目录的绝对路径
    当我们使用go install命令编译和打包应用程序时,该命令会将编译后二进制程序打包GOBIN目录,一般我们将GOBIN设置为GOPATH下的bin目录。
  • GOTOOLDIR:Go工具目录的绝对路径
  • GOCACHE:go缓存目录
    可以使用 go clean -cache 清空,如果目录变得很大的话
    *GOENV:GO全局环境变量
  • GOMODCACHE:go mod进行包管理时的缓存目录
    一般为GOPATH下的pkg下的mod目录
  • GOPROXY:代理
  • GOTOOLDIR:GO工具的安装目录
    有cgo.exe等
  • GOVERSION:go的版本号

2. 设置代理

# 设置`GOPROXY`的值为`https://goproxy.cn,direct`(不能设置操作系统环境变量)
go env -w GOPROXY=https://goproxy.cn,direct

在这里插入图片描述

恢复默认值

# 将`GOPROXY`恢复为默认值 
go env -u GOPROXY

在这里插入图片描述

Loading…

;