介绍
在本实验中,我们将学习 Go 中管理依赖的两种不同方式:GOPATH 和 Go Modules。这些是有效组织和管理 Go 项目的关键概念。
知识点:
- GOPATH
- GOROOT
- Go Modules
在本实验中,我们将学习 Go 中管理依赖的两种不同方式:GOPATH 和 Go Modules。这些是有效组织和管理 Go 项目的关键概念。
知识点:
在这一步骤中,我们将通过解压提供的 tarball 文件来准备环境。
首先,打开终端并输入以下命令,导航到项目目录:
cd ~/project
解压当前目录下的 helloWorld.tar.gz
文件:
tar -xzf helloWorld.tar.gz
文件解压完成后,检查是否已创建 helloWorld
文件夹:
ls helloWorld
如果解压成功,该命令将列出 helloWorld
目录中的内容。
在 Go 1.11 之前,Go 使用一个特定的工作空间 GOPATH
来存储所有 Go 代码。在这一步骤中,我们将了解 GOPATH 的工作原理。
GOROOT
是 Go 安装的目录,包括其工具和标准库包。GOPATH
是你个人 Go 代码存放的位置,它包含三个目录:
要检查当前的 GOPATH
和 GOROOT
,可以运行以下命令:
## 检查 GOPATH 目录
go env | grep GOPATH
## 检查 GOROOT 目录
go env | grep GOROOT
这些命令将显示你机器上的 GOPATH
和 GOROOT
路径。
Go Modules 在 Go 1.11 中引入,并在 Go 1.13 中默认启用,旨在解决两个主要问题:
GOPATH/src
目录中。使用 Go Modules 后,你可以将代码存储在系统的任何位置。在这一步骤中,我们将为一个新项目初始化 Go Module。
创建一个名为 testHello
的项目目录:
cd ~/project
mkdir testHello
切换到 testHello
目录:
cd testHello
为该项目初始化 Go Module:
go mod init testHello
输出应为:
go: creating new go.mod: module testHello
在 testHello
文件夹中创建一个新的 Go 文件 testHello.go
,内容如下:
touch testHello.go
package main
import "fmt"
func main() {
fmt.Println("hello, world")
}
现在,我们已经使用 Go Modules 初始化了 testHello
项目,并向其中添加了一个简单的 Go 程序。
在这一步骤中,我们将演示如何在你的 Go 项目中导入和使用其他模块。
helloWorld
文件夹中的 helloWorld
包已经使用 Go Modules 初始化。同样,test
包也使用了 Go Modules,并从 helloWorld
包中导入了 Say
函数。
要探索这一点,请运行以下命令:
首先,查看 helloWorld
和 test
目录的结构:
helloWorld
├── go.mod
└── helloWorld.go
test
├── go.mod
└── test.go
接下来,打开 test/go.mod
文件。你应该会看到以下内容:
module test
go 1.15
require "helloWorld" v0.0.1
replace "helloWorld" => "../helloWorld"
replace
指令告诉 Go 使用本地路径 ../helloWorld
,而不是从外部仓库获取。require
指令指定 test
包依赖于 helloWorld
包的 v0.0.1
版本。
参数 | 描述 |
---|---|
module | 指定包名 |
require | 指定依赖项 |
replace | 替换依赖项 |
exclude | 排除依赖项 |
要运行 test
包中的 test.go
文件:
cd ~/project/test
go run test.go
输出应为:
hello, world
在 Go 中,你可以轻松导入远程包。让我们通过使用 GitHub 上的一个远程包来演示这一点。
创建一个目录 remoteModule
:
cd ~/project
mkdir remoteModule
cd remoteModule
初始化 Go Module:
go mod init remoteModule
在 remoteModule
文件夹中创建一个文件 remote.go
,内容如下:
touch remote.go
package main
import (
"github.com/labex-labs/golang-dev-code/chap02module"
)
func main() {
chap02module.StringTobase64("miiy")
}
该程序从 GitHub 导入了 chap02module
包,并使用其 StringTobase64
函数。
使用以下命令运行 remote.go
文件:
go get github.com/labex-labs/golang-dev-code/chap02module
go run -v remote.go
提示:免费用户无法访问互联网,因此无法运行此命令。升级到 Pro 计划以获取互联网访问权限。
go get
命令将从 GitHub 下载 chap02module
包并将其放入你的模块缓存中。完成后,go run
命令将执行你的程序。
在这一步骤中,我们将通过创建一个新文件来测试我们的知识,该文件使用远程模块中的 Hello
函数。
创建一个文件夹 remoteModule2
:
cd ~/project
mkdir remoteModule2
cd remoteModule2
初始化 Go Module:
go mod init remoteModule2
创建一个文件 remote2.go
,内容如下:
touch remote2.go
package main
import (
"github.com/labex-labs/golang-dev-code/chap02module"
)
func main() {
chap02module.Hello()
}
运行程序:
go get github.com/labex-labs/golang-dev-code/chap02module
go run remote2.go
输出应为:
hello
在本实验中,我们学习了以下内容:
GOPATH
和 GOROOT
目录的含义和用途。通过本实验,你应该能够熟练使用 Go Modules 来管理 Go 项目中的依赖。