Неправильно заполняется слайс интерфейсов

Всем привет . Прошу помощи в устранении недоразумения моего)) В комментариях привел пример ожидаемлого результата и фактического. Не понимаю, почему так происходит. Как исправить?

package main

import (
    "context"
    "encoding/json"
    "log"
    "post/service"
    "strings"

    "github.com/jackc/pgx/v4"
)

/* struct for get data from db and marshall it */
type MarshData struct {
    MarshID   string `json:"id"`
    MarshNAME string `json:"name"`
    MarshAGE  int    `json:"age"`
}

/* Gets items from db and return slice of byte slices */
func GettingFromDb(Expression string) [][]byte {
    data := MarshData{}
    var sliceForMarshalled [][]byte
    dbconnect, _ := pgx.Connect(context.Background(), strings.TrimSpace(string(service.ReadFile(".connect.txt"))))
    rows, err := dbconnect.Query(context.Background(), Expression)
    log.Println(err)
    for rows.Next() {
        rows.Scan(&data.MarshID, &data.MarshNAME, &data.MarshAGE)
        marshalled, _ := json.Marshal(MarshData{MarshID: data.MarshID, MarshNAME: data.MarshNAME, MarshAGE: data.MarshAGE})
        sliceForMarshalled = append(sliceForMarshalled, marshalled)
    }
    return sliceForMarshalled
}

/* Unmarshall data and gets fields and returns slice of fields with data from db */

/*  ПРОБЛЕМНАЯ ФУНКЦИЯ ПРОБЛЕМНАЯ ФУНКЦИЯ ПРОБЛЕМНАЯ ФУНКЦИЯ ПРОБЛЕМНАЯ ФУНКЦИЯ ПРОБЛЕМНАЯ ФУНКЦИЯ */
func UnmarshallFromDB(Expression string) []interface{} {
    data := GettingFromDb(Expression)
    var unmarshalledMaps map[string]interface{}
    var fieldFromUnmarshelledMaps []interface{}
    for i := 0; i < len(data); i++ {
        /* Кладу результат десереализации в мапу unmarshalledMaps*/
        json.Unmarshal(data[i], &unmarshalledMaps)

        /* здесь выводятся правильные мапы с данными и они за каждый проход разные и в конце цикла
        // имеют вид:
        //
        //      map[age:someAge1 id:SomeID1 name:SomeName1]
        //      map[age:someAge2 id:SomeID2 name:SomeName2]
        //      map[age:someAge3 id:SomeID3 name:SomeName3]
        */
        log.Println(unmarshalledMaps)

        /* делаю аппенд мапы в слайс интерфесов, ожидаю, что будут зааппенжены разные данные,
        так как unmarshalledMaps на каждом проходе цикла имеет разные данные */

        fieldFromUnmarshelledMaps = append(fieldFromUnmarshelledMaps, unmarshalledMaps)
    }
    /* Но здесь я вывожу слайс интерфейсов fieldFromUnmarshelledMaps и вижу 
        что аппендились одни и те же данные */

    /* Вот пример ожидаемого результата:
    //      map[age:someAge1 id:SomeID1 name:SomeName1]
    //      map[age:someAge2 id:SomeID2 name:SomeName2]
    //      map[age:someAge3 id:SomeID3 name:SomeName3]
    */
    log.Println(fieldFromUnmarshelledMaps...)
    /* Вот то что я получаю:
    //      map[age:someAge3 id:SomeID3 name:SomeName3]
    //      map[age:someAge3 id:SomeID3 name:SomeName3]
            map[age:someAge3 id:SomeID3 name:SomeName3]
    */

    /* При то, что unmarshalledMaps за все проходы меняется и при выводе его имеет вид
    //      map[age:someAge1 id:SomeID1 name:SomeName1]
    //      map[age:someAge2 id:SomeID2 name:SomeName2]
    //      map[age:someAge3 id:SomeID3 name:SomeName3]
    */
    return fieldFromUnmarshelledMaps
}

/* it's expamle using this package */
func main() {
    UnmarshallFromDB("select * from users")
}

Ответы (0 шт):