8.GoPath和Go Module

本文详细介绍了Go语言中的GoPath和Go Modules。GoPath是一个环境变量,用于项目工作目录,但在Go 1.11后,Go Modules成为推荐的依赖管理方式,解决了GoPath模式下版本控制的问题。Go Modules提供了go.mod和go.sum文件,用于管理模块的依赖和验证版本的完整性。此外,还详细阐述了Go Modules的相关环境变量如GO111MODULE、GOPROXY、GOSUMDB等的用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

GoPath和Go Module

1.1 GoPath 介绍

1.2 GOPATH 目录结构

1.2.1 编译时的依赖包查找机制

1.3 为什么弃用 GOPATH 模式

1.4 在 GOPATH 模式下的产物

1.5 了解Go Modules

1.6 Go Modules 命令

1.7 GO Modules 提供的环境变量

1.7.1 GO111MODULE

1.7.2 GOPROXY

1.7.3 GOSUMDB

1.7.4 GONOPROXY/GONOSUMDB/GOPRIVATE

1.8 go.mod 文件介绍

1.9 go.sum 文件介绍


GoPath和Go Module

1.1 GoPath 介绍

GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。

在 Go 1.8 版本之前,GOPATH 环境变量默认是空的。从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录,参见下表。

GOPATH在不同操作系统平台上的默认值

平台 GOPATH默认值 举例
Windows %USERPROFILE%/go C:\Users\用户名\go
Unix $HOME/go /home/用户名/go

GOPATH告知go,需要代码(包括本项目即内部依赖和引用外部项目的代码即外部依赖)的时候去哪里找。GOPATH随着项目的不同重新设置

1.2 GOPATH 目录结构

GOPAT有三个目录:src bin pkg

  • src目录:存储所有 .go 文件或源代码。在编写Go应用程序、程序包和库时,一般会以$GOPATH/src/github.con/foo/bar 的路径进行存放

  • bin目录:go get 这种bin工具的时候,二进制文件下载的目的地;golang 编译可执行文件存放路径

  • pkg目录:golang编译包时,生成的中间缓存文件(.a)存放路径。中间缓存文件(.a)是编译过程中生成的,每个package都会生成对应的中间缓存文件(.a),Go在编译的时候先判断package的源码是否有改动,如果没有的话,就不再重新编译中间缓存文件(.a)。

gopath_workspace

1.2.1 编译时的依赖包查找机制

只要我们的代码里面出现了import 关键字, 就代表我们需要依赖其他的源代码,比如

import "fmt"
import "github.com/jinzhu/gorm"

这个时候 编译器就需要搜索这些源码的存放位置, 搜索顺序为:

  • 优先使用vendor目录下面的包

  • 如果vendor下面没有搜索到,再搜索$GOPATH/src下面的包

  • 如果GOPATH下面没有搜索到,那么搜索GOROOT/src下面的包

比如fmt的搜索({dir}/path):

  1. vendor 无

  2. $GOPATH/src 无

  3. GOROOT/src找到,路径为(GOROOT/src/fmt)

比如第一天我们有这样一个代码:$GOPATH/src/day1/compile/main.go

package main
​
import "day1/compile/pkg"
​
func main() {
        pkg.Demo()
}

搜索顺序({dir}/path):

  1. vendor 无

  2. GOPATH/src找到,路径为(GOPATH/src/day1/compile/pkg)

1.3 为什么弃用 GOPATH 模式

在 GOPATH 的 $GOPATH/src 下进行 .go 文件或源代码的存储,我们可以称其为 GOPATH 的模式,这个模式,看起来好像没有什么问

题,那么为什么我们要弃用呢,参见如下原因:

GOPATH 模式下没有版本控制的概念,具有致命的缺陷,至少会造成以下问题:

  • 在执行 go get 的时候,你无法传达任何的版本信息的期望,也就是说你也无法知道自己当前更新的是哪一个版本,也无法通过指定来拉取自己所期望的具体版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值