Golang: структура не отображается в том же пакете, но во вложенной папке
Я работаю над проектом Go со следующей структурой:
pages (folder)
-> faculty (folder)
> instructors.go
> professors.go
generalpages.go (inside pages folder)
generalpages.go обрабатывает мою структуру шаблона репозитория со следующим объявлением:
type Repository struct {
App *config.AppConfig
}
Все общие страницы (например, «Главная», «О программе») работают правильно с таким типом объявления:
func (m *Repository) AboutPage(w http.ResponseWriter, r *http.Request) {
// some functionality
}
Однако, если я хочу структурировать свои страницы и использовать одно и то же объявление для моей InstructorsPage (внутри Instructor.go), как показано ниже, это не сработает, и в VSCode появится сообщение об ошибке «необъявленное имя».
Насколько я понимаю, объект должен быть виден в одном пакете, но все равно он не работает. "go build" не вызывает ошибок, но когда я использую пакет маршрутизации (chi), он не может правильно ссылаться на него.
1 ответ
Пакеты Go не работают.
Если ваша структура каталогов:
moduleRootDir
parentDir
subDir
и если оба каталога определяют имя пакета
pkg
, то это два разных пакета.
Если имя модуля
module
, то путь импорта для пакета в parentDir будет
module/pkg
, а пакет в подкаталоге -
module/pkg/pkg
. Чтобы использовать имена, определенные в подкаталоге, импортируйте его в файлы go в parentDir:
package pkg
import (
subpkg "module/pkg/pkg"
)
Затем вы можете получить к ним доступ, используя
subpkg.SymbolName
.