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 main | package 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
| Python | Go |
|---|---|
| Один файл — и модуль, и скрипт | Роли разделены: main vs library package |
if __name__ == "__main__": | package main + func main() |
| Код верхнего уровня при import | Только init() и объявления; запуск — через main |
Дальше по разделу
| Тема | Статья |
|---|---|
go mod, структура проекта | 24 — Первая программа |
| CLI cobra | 33 — CLI |
| HTTP сервер | 2412 — Gin |
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Основы языка Go - философия простоты, модель компиляции и идиоматичный подход к системной разработке. Go — это статически типизированный язык программирования общего назначения, разработанный компанией Google для создания эффективных, масштабируемых и надежных систем. Набор советов, правил, принципов и обычаев в разработке на этом языке. История Go - инженерные цели языка, философия простоты и эволюция инструментов экосистемы. Экосистема приложений на Go - встроенные инструменты, workflow разработки и практики сопровождения проектов. Кавычки, rune и string, точка, запятая, автоматическая вставка точки с запятой, скобки, подчёркивания и типичные ошибки новичков в Go. Предопределённые идентификаторы не являются ключевыми словами, но имеют специальное значение в языке. Их можно переопределить в локальной области видимости, но делать это не рекомендуется. Набор функций, которые включены в стандартную библиотеку языка. Особенности Go - интерфейсы, композиция, модель ошибок и практики написания поддерживаемого кода. Go вводит конкурентность через встроенные синтаксические конструкции и правила выполнения. Ниже рассматриваются основные направления практического применения Go, объяснённые через призму его технических характеристик и требований реальных инфраструктур. Типизация, набор правил определения типа данных значений языка.Основы языка Go
Что требуется знать перед началом изучения языка программирования Go
Рекомендации по разработке на Go
История языка Go
Экосистема приложений на Go
Синтаксис и пунктуация в Go
Ключевые слова языка Go
Встроенные функции и пакеты Go
Особенности языка Go
Синтаксические конструкции Go
Области применения Go
Типы данных и объявление переменных в Go