Должно ли имя пакета в Go совпадать с именем самого внутреннего каталога?

ВНИМАНИЕ, этот вопрос касается спецификаций языка Go, а не рекомендаций или рекомендаций.

Я прочитал много статей о пакетах, но до сих пор не совсем понимаю взаимосвязь между каталогом и именем пакета. Вот мой пример.

Моя структура проекта похожа на следующие снимки экрана. Когда я делаю go run ~/go/src/myproj/main.go, ошибка говорит:

src myproj main.go: 5: 2: не удается найти пакет myproj / pa / pb ни в одном из: c: go src myproj pa pb (из $ GOROOT) C: Users terry go src myproj pa pb (из $ GOPATH)

Однако, если я изменю package pb на package pa в p.go, и изменю импорт с «myproj/pa/pb» на «myproj/pa», и изменю fmt.Print(pb.Greet) на fmt.Print(pa.Greet) в main.go, это сработает. Должен ли самый внутренний каталог соответствовать имени объявления пакета? Моя версия для игры — 1.14.4

Должен ли самый внутренний каталог соответствовать имени объявления пакета? Нет, конечно нет. Но это очень разумное соглашение, и вы никогда не должны его нарушать, потому что люди будут ненавидеть вас (справедливо), если вы это сделаете.   —  person Peiti Li    schedule 30.06.2020

Источник: ledsshop.ru

Стиль жизни - Здоровье!