Проблемы со сканированием данных в экспортируемые структуры - PullRequest
0 голосов
/ 25 октября 2019

Я работаю над своим первым приложением 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, поэтому кто-нибудь может указать мне правильное направление, где я иду не так? Пакет правильно экспортируется / импортируется, так почему он должен работать по-другому?

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