Создание модуля в GO

Создание и подключение новых модулей локально

Создание проекта

Создать директорию с проектом

mkdir greetings
cd greetings

Инициализация

$ go mod init example.com/greetings
go: creating new go.mod: module example.com/greetings

Команда init создает файл go.mod с основными параметрами модуля:

module example.com/hello

go 1.24.3

Создать файл GO

В редакторе создаю файл: напрмер greetings.go

package greetings

import "fmt"

// Hello returns a greeting for the named person.
func Hello(name string) string {
    // Return a greeting that embeds the name in a message.
    message := fmt.Sprintf("Hi, %v. Welcome!", name)
    return message
}

важно указать в package название пакета для последующей ссылки на него

Создание основного модуля MAIN

Если проект многомодульный, то повторяем из корня проекта создание нового модуля:

cd ..
mkdir hello
cd hello

Выполняем инициализацию

$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello

Создаем файл основного проекта

имя файла должно быть таким, каким потом будет исполняемый файл, но в файле обязательно должен быть: package main

package main

import (
    "fmt"

    "example.com/greetings"
)

func main() {
    // Get a greeting message and print it.
    message := greetings.Hello("Gladys")
    fmt.Println(message)
}

Корректируем путь на зависимый модуль

go mod edit -replace example.com/greetings=../greetings

изменит в файле go.mod на фактический путь зависимого модуля

Получаем файл:

module example.com/hello

go 1.24.3

replace example.com/greetings => ../greetings

Выполняем go mod tidy

$ go mod tidy
go: found example.com/greetings in example.com/greetings v0.0.0-00010101000000-000000000000

для фактической связки только нужных пакетов и проверки go.mod

получаем go.mod

module example.com/hello

go 1.24.3

replace example.com/greetings => ../greetings

require example.com/greetings v0.0.0-00010101000000-000000000000

Запуск проекта

$ go run .
Hi, Gladys. Welcome!