Попытка отобразить структуру на мою открытую структуру API - PullRequest
0 голосов
/ 25 апреля 2018

Я пишу функции отображения, которые сопоставляют мои внутренние модели с теми, которые я буду показывать в моем API.

Как мне сопоставить свойство Locations.Я нахожусь над ними?Нужно ли сначала инициализировать местоположения UserApi?

Я немного смущен тем, как лучше это сделать, не имея никаких исключений и т. Д.

func mapUserToApi(user User) UserApi {
  api := &UserApi{
     Id: user.Id,
     ..
     ..
  }

  for index, location := range user.Locations {
    /// ????????????
  }

  return api
}

func mapLocationToApi(location Locatio) LocationApi {
  ..
}


type User struct {
  Id int

  Locations []Location
}

type UserApi struct {
  Id int

  Locations []LocationApi
}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Сначала выделите, затем выполните цикл для диапазона

func mapUserToApi(user User) UserApi {
  api := &UserApi{
     Id: user.Id,
     Locations: make([]LocationApi, len(user.Locations), len(user.Locations)),
  }

  for index, location := range user.Locations {
    api.Locations[index] = mapLocationToApi(location)
  }

  return api
}
0 голосов
/ 25 апреля 2018

range отлично подойдет для того, что вы хотите сделать.Приведенный ниже код не является специфическим и может быть обобщен для вашего варианта использования.

func mapLocationsToModifiedLocations(user User) []ModifiedLocation {
    // initialize a new slice with the type of your API-appropriate output
    // and a length of zero
    var output := make([]ModifiedLocation, 0)

    // iterate over your input data
    for _, element := range user.Locations {
        // use append to automatically re-size the output array as needed
        output = append(output, modifyLocation(location))
    }

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