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

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 пришел неделю назад и уже понимаю его мощь, но не все поддается сразу.

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

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

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

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

Войти через центр авторизации
Похожие вопросы