Я работаю над своим первым приложением Go, и я стараюсь, чтобы мои файлы были хорошо организованы, DRY и т. Д. У меня есть структура, которая представляет данные, которые я ожидаю получить от моих запросов SQL, определенные в закрытиисреда, которая возвращает мой запрос handlerFunc. Урезанная версия:
func (s *server) getComponents() http.HandlerFunc {
type component struct {
ID int `json:"_id,omitempty"`
Name string `json:"name"`
// ... many more fields
}
return func(res http.ResponseWriter, req *http.Request) {
rows, err := s.db.GetComponents()
defer rows.Close()
if err != nil {
s.testQueryError(err, "etc, etc")
return
}
var components []component
for rows.Next() {
var c component
rows.Scan(&c)
components = append(components, c)
}
data, _ := json.Marshal(components)
res.Write(data)
}
}
Эта реализация отвечает ожидаемыми данными. Однако я ожидал, что мне может понадобиться эта структура в других маршрутах, и подумал, что было бы неплохо определить эту структуру в другом месте и экспортировать ее из каталога / пакета "models". Новая попытка:
// app/models/models.go
package "models"
type Component struct {
ID int `json:"_id,omitempty"`
// ...
}
// app/routes.go
import "app/models"
func (s *server) getComponents() http.HandlerFunc {
return func(res http.ResponseWriter, req *http.Request) {
rows, err := s.db.GetComponents()
// ...
var components []models.Component
for rows.Next() {
var c models.Component
rows.Scan(&c)
components = append(components, c)
}
data, _ := json.Marshal(components)
res.Write(data)
}
}
Эта версия не сканирует должным образом, и почтальон получает все пустые поля. Я новичок в строго типизированных языках, таких как Go, поэтому кто-нибудь может указать мне правильное направление, где я иду не так? Пакет правильно экспортируется / импортируется, так почему он должен работать по-другому?