Пакет "main" и func "main"

Intro/sample go progs, которые я видел и экспериментировал с

package main

и имеют

func main()

Есть ли связь между "основным" в линии пакета и "основным" в строке func? Я предполагаю, что нет. C/C++ использует ту же "основную" точку входа. Просто хочу убедиться, хотя. Я не видел никаких документов, которые говорят, что использование "main" - это просто совпадение.

Ответ 1

Точка входа для приложения является main функцией в main пакете, как описано в спецификации:

Полная программа создается путем связывания одного не импортированного пакета, называемого основным, со всеми пакетами, которые она импортирует, транзитивно. Основной пакет должен иметь имя пакета main и объявлять функцию main которая не принимает аргументов и не возвращает значения.

func main() { … }

Выполнение программы начинается с инициализации основного пакета и последующего вызова функции main. Когда этот вызов функции возвращается, программа завершается. Он не ждет завершения других (неосновных) программ.

Спецификация языка не придает особого значения имени main за пределами этого контекста. Имя main не является зарезервированным именем.

Можно объявить main функцию в неосновных пакетах. В таких случаях это просто функция с именем main.