Для преобразования результатов запроса из базы данных в структуры с вложенными полями в Golang можно воспользоваться библиотекой `github.com/jackc/pgx/v4/stdlib`. Эта библиотека предоставляет возможность сканировать результаты SQL-запросов напрямую в структуры.
Пример использования:
```go
import (
"database/sql"
"fmt"
"github.com/jackc/pgx/v4/stdlib"
)
type User struct {
ID int
Name string
Address Address
}
type Address struct {
City string
Street string
}
func main() {
connStr := "postgresql://username:password@localhost/dbname"
db, err := sql.Open("pgx", connStr)
if err != nil {
panic(err)
}
defer db.Close()
rows, err := db.Query("SELECT id, name, city, street FROM users JOIN addresses ON users.address_id = addresses.id")
if err != nil {
panic(err)
}
defer rows.Close()
var users []User
for rows.Next() {
var user User
var address Address
err := rows.Scan(&user.ID, &user.Name, &address.City, &address.Street)
if err != nil {
panic(err)
}
user.Address = address
users = append(users, user)
}
fmt.Println(users)
}
```
В данном примере мы создаем структуры User и Address, которые представляют данные пользователя и его адрес. Затем выполняем SQL-запрос, который объединяет таблицы пользователей и адресов. При сканировании результатов запроса мы присваиваем данные адреса полю Address структуры User и добавляем пользователя в срез users.
Таким образом, мы эффективно маппим данные из запроса в структуры с вложенными полями, не прибегая к созданию отдельных мапперов.