Введение
В этом лабораторном занятии мы узнаем о двух различных способах управления зависимостями в Go: GOPATH и Go Modules. Это важные концепции для эффективной организации и управления проектами на Go.
Точки знания:
- GOPATH
- GOROOT
- Go Modules
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
В этом лабораторном занятии мы узнаем о двух различных способах управления зависимостями в Go: GOPATH и Go Modules. Это важные концепции для эффективной организации и управления проектами на Go.
Точки знания:
На этом шаге мы подготовим среду, распаковав предоставленный архив tar.
Сначала откройте терминал и перейдите в директорию проекта, введя следующую команду:
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
, выполните следующие команды:
## Check the GOPATH directory
go env | grep GOPATH
## Check the GOROOT directory
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
Создайте новый файл на Go testHello.go
внутри папки testHello
со следующим содержимым:
touch testHello.go
package main
import "fmt"
func main() {
fmt.Println("hello, world")
}
Теперь мы инициализировали проект testHello
с использованием Go Modules и добавили в него простую программу на Go.
На этом шаге мы покажем, как импортировать и использовать другие модули в вашем проекте на Go.
Пакет helloWorld
в папке helloWorld
был инициализирован с использованием Go Modules. Аналогично, пакет test
, который также использует Go Modules, импортирует функцию Say
из пакета helloWorld
.
Для того чтобы это проверить, выполните следующую команду:
Сначала посмотрите на структуру директорий 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
зависит от версии v0.0.1
пакета helloWorld
.
Параметр | Описание |
---|---|
module | Указывает пакет |
require | Указывает зависимости |
replace | Заменяет зависимости |
exclude | Исключает зависимости |
Для запуска файла test.go
в пакете test
:
cd ~/project/test
go run test.go
Вывод должен быть таким:
hello, world
В Go вы можете легко импортировать удаленные пакеты. Давайте продемонстрируем это, используя удаленный пакет с GitHub.
Создайте директорию remoteModule
:
cd ~/project
mkdir remoteModule
cd remoteModule
Инициализируйте Go-модуль:
go mod init remoteModule
Создайте файл remote.go
внутри папки remoteModule
со следующим содержимым:
touch remote.go
package main
import (
"github.com/labex-labs/golang-dev-code/chap02module"
)
func main() {
chap02module.StringTobase64("miiy")
}
Эта программа импортирует пакет chap02module
с GitHub и использует его функцию StringTobase64
.
Запустите файл remote.go
с помощью следующих команд:
go get github.com/labex-labs/golang-dev-code/chap02module
go run -v remote.go
Совет: Пользователи бесплатной версии не могут получить доступ в Интернет, поэтому вы не сможете выполнить эту команду. Перейдите на план Pro, чтобы получить доступ в Интернет.
Команда go get
загрузит пакет chap02module
с GitHub и поместит его в кэш модулей. После этого команда go run
выполнит вашу программу.
На этом шаге мы проверим свои знания, создав новый файл, который использует функцию Hello
из удаленного модуля.
Создайте папку remoteModule2
:
cd ~/project
mkdir remoteModule2
cd remoteModule2
Инициализируйте Go-модуль:
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.