Неверное имя пакета не выдает ошибку при сборке - PullRequest
0 голосов
/ 28 ноября 2018

Учитывая пример hello world с неправильным именем пакета с файлом с именем main.go

package test

import "fmt"

func main() {
    fmt.Println("hello world")
}

на go build main.go сборка не работает (не генерирует исполняемый файл) из-заневерное имя пакета.Но почему не выдается ошибка?

1 Ответ

0 голосов
/ 28 ноября 2018

Имя пакета test не является неправильным, оно действует в соответствии с Спецификация: Предложение пакета:

PackageClause  = "package" PackageName .
PackageName    = identifier .

test является действительным идентификатором Go.

Относительно того, что делает go build main.go? 1011 *

Обычно вы перечисляете пакеты в go build, но вы также можете перечислить .go исходные файлы, как в вашем примере.

Цитирование из go help build:

Если аргументы для сборки представляют собой список файлов .go, сборка обрабатывает их как список исходных файлов с указанием одного пакета.

* 1023Так что go build просто собрал ваш test пакет, состоящий из одного main.go исходного файла.Не является ошибкой добавлять функцию main() в пакет, который не является main.

Относительно того, почему «ничего» не происходит: go build не генерирует вывод, если все в порядке, и выводитошибка, если что-то не так.go build, примененный к пакету, отличному от main, просто «проверяет», может ли пакет быть собран, но отбрасывает результат.Пожалуйста, отметьте Что такое build build?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...