Перейти к основному содержимому

package main и func main() — исполняемая программа Go

Разработчику

В Go точка входа задаётся двумя ключевыми словами: package main в начале файла и func main() без параметров. Библиотечные пакеты используют своё имя (package httputil, package json) и не содержат main.

См. также: Первая программа · основы · Python — аналог.


Минимальная программа

package main

import "fmt"

func main() {
fmt.Println("Hello, Go")
}

Запуск:

go run .
# или
go build -o app . && ./app

Runtime начинает с main() в пакете main.


package main vs библиотека

package mainpackage mylib
НазначениеСобрать исполняемый бинарникКод для import
func mainОбязателен (ровно один в модуле cmd)Запрещён
go build.exe / бинарник.a (архив пакета)
// calculator/calc.go — библиотека
package calculator

func Add(a, b int) int {
return a + b
}
// cmd/demo/main.go — точка входа
package main

import (
"fmt"
"example.com/myproject/calculator"
)

func main() {
fmt.Println(calculator.Add(5, 3))
}

Импорт calculator не запускает чужой main — у библиотеки его нет. Это жёстче, чем Python: роль «скрипт / модуль» разделена именем пакета и структурой каталогов (cmd/, internal/).


Несколько файлов в main

Все файлы одного каталога с package main компилируются вместе. func main() должен быть один на исполняемый пакет.

Демо и флаги CLI часто выносят в cmd/myapp/main.go, а логику — в internal/ или корневой пакет библиотеки.


init() — загрузка пакета

Функции func init() выполняются при импорте пакета (до main в программе). Порядок — по зависимостям импортов.

package demo

import "fmt"

func init() {
fmt.Println("пакет demo инициализирован")
}

При import _ "demo" или использовании пакета init сработает, main другого пакета — нет. Side effects в init для библиотек держат минимальными.


Сравнение с Python

PythonGo
Один файл — и модуль, и скриптРоли разделены: main vs library package
if __name__ == "__main__":package main + func main()
Код верхнего уровня при importТолько init() и объявления; запуск — через main

Дальше по разделу

ТемаСтатья
go mod, структура проекта24 — Первая программа
CLI cobra33 — CLI
HTTP сервер2412 — Gin

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").