Пакеты в экспортных константах, переменных, типах и функциях, которые имеют заглавные буквы в качестве их имени. Сам пакет не является чем-то непосредственным образом манипулируемым программой.
Пакет goji
должен экспортировать переменную, названную как goji.Goji
, если вы хотите получить к ней прямой доступ из других пакетов. Лучшим решением является предоставление некоторых функций в пакете, которые позволяют вам регистрировать свои функции/помощники.
Можно также экспортировать функцию из goji
как:
func Set(s string, func(w http.ResponseWriter, r *http.Request)) { ... }
, которые могут быть использованы другими пакетами:
goji.Set("/static", myFunc)
Ошибка у вас «использование пакета годжи без выбора» говорит вы не можете использовать имя пакета без указания того, какое экспортированное значение вы хотите получить из пакета. Ожидается, что goji.something
не будет goji
сам по себе.
Функции init()
внутри идет файлы имеют специальные свойства: см http://golang.org/ref/spec#Program_initialization_and_execution
но ид нравится инкапсулировать все мои маршруты в одном пакете –
хмм ... странно, что он работает. это те же пакеты, созданные в одной памяти? Я думал, что отдельный импорт на один пакет может создать отдельные экземпляры. –
Да, пакет (и его переменные) существует только один раз в памяти, независимо от того, сколько мест вы «импортируете» его. –