yury-gubsky
@yury-gubsky
Программист PHP

Golang, Как объединить две структуры в одну новую со всеми полями из предыдущих двух?

У нас есть узкое место на бэкенде при генерации прайса средствами php, около 30 сек, тестировали на Go, 1-2 сек.

Есть пример на php:
// Запрос к базе к таблице товаров
// $sql1 .....

// Здесь у нас массив товаров в итоге
$products = [];

// Здесь ключи массива формируются сами от 0 и дальше...
while ($row = mysqli_fetch_assoc($sql1)) {
    $products[]['Name']    = $row['Name'];
    $products[]['Code']    = $row['Code'];
    $products[]['InStock'] = $row['InStock'];
}

// Запрос к базе к таблице товаров
// $sql2 .....

// Здесь у нас массив цен товаров в итоге
$prices = [];

// Здесь ключами массива ставим код товара
// Чтобы в дальнейшем можно было обращаться к ценам
// к примеру так: $prices[$product['code']]['price1']
while ($row = mysqli_fetch_assoc($sql2)) {
    $prices[$row['code']]['Price1'] = $row['Price1'];
    $prices[$row['code']]['Price2'] = $row['Price2'];
}

// Теперь создаем итоговый общий массив со всеми данными
$productFullData = [];

foreach($products as $product) {
    $productFullData[]['Name']    = $product['Name'];
    $productFullData[]['Code']    = $product['Code'];
    $productFullData[]['InStock'] = $product['InStock'];
    $productFullData[]['Price1']  = $prices[$product['Code']]['Price1'];
    $productFullData[]['Price2']  = $prices[$product['Code']]['Price2'];
}

// И дальше уже оперируем с массивом $productFullData...
// Формируем прайс .xlsx


И есть пример на Go:
package main

// Products список товаров (название, цена, остаток на складе)
type Products struct {
	Name    string
	Code    int
	InStock int
}

// Prices список цен и код
type Prices struct {
	Price2 int
	Price3 int
	Code   int
}

// ProductFullData итоговые данные
type ProductFullData struct {
	Name    string
	Code    int
	InStock int
	Price2  int
	Price3  int
}

func main() {
	// Получили товары
	products := model.Products()

	// Получили цены
	prices := model.Prices()

	// Вопрос!!!
	// Как их обединить в один чтобы все
	// данные были в одной структуре ProductFullData

	// И дальше уже оперируем с массивом $productFullData...
	// Формируем прайс .xlsx
}


Участки кода с запросами к базе пропустил сознательно, с этим и так все понятно
Недопонимание у меня именно с тем как из двух структур сделать одну новую со всеми данными, но внимание, чтобы при генерации второй структуры ключами у цен были коды товаров, а не по порядку (0,1,2...)

В примерах кода я все закоментил чтобы понятно было.

Сразу уточню чтоб не пинали меня толпой :) в Go пришел неделю назад и уже понимаю его мощь, но не все поддается сразу.

Приму как примеры кода так и отсылки к докам.
Но только не такие типа иди сюда по ссылки и кури мануалы, как минимум чтобы типа учи в этом направлении или пробуй вот это...

Всем заранее спасибо!
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
Просто создать структуру, заполнив её поля.

fullData := ProductFullData{
  Name: product.Name,
  Code: price.Code,
  InStock: product.InStock,
  Price2: price.Price2,
  Price3: price.Price2,
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Sundagy
Pandora Dev
можно в моделях gorm расписать связи и забирать массив готовых структур productfulldara одной строкой сразу из бд
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Fastdev AB Ижевск
До 110 000 руб.
OTUS Москва
от 40 000 до 100 000 руб.
Devmasterz Санкт-Петербург
от 3 000 usd.