У меня есть функция, которая в основном собирает список пользователей из базы данных mongoDB, а затем сохраняет этих пользователей в структуре.
// GetUsers gets all local users from a MongoDB
func GetUsers() {
var decode structs.User
logging.Info("Gathering Users from DB")
collection := mongoclient.Database.Collection("LocalUsers")
cur, err := collection.Find(context.TODO(), bson.D{})
if err != nil {
logging.Fatal(fmt.Sprintf("In users - Getting data from MongoDB: %s", err))
}
for cur.Next(context.TODO()) {
// create a value into which the single document can be decoded
err := cur.Decode(&decode)
if err != nil {
logging.Fatal(fmt.Sprintf("In users - Error decoding results: %s", err))
}
// if there is nothing in the database dont try create a User
if decode.Username != "" {
structs.LocalUsers[decode.Username] = decode
fmt.Printf("stored: %+v\n", structs.LocalUsers[decode.Username].DcList)
fmt.Printf("struct: %+v\n", structs.LocalUsers[decode.Username].DcList)
}
fmt.Printf("in get stored: %+v\n", structs.LocalUsers)
}
cur.Close(context.TODO())
}
Рассматриваемая структура
//LocalUsers is just a slice of all users gathered from DB
var LocalUsers = make(map[string]User)
// User describes a user
type User struct {
Username string
Password string
FullName string
Email string
Role string
DcList []string
}
Это Концепция работает в других частях моего кода, однако здесь кажется, что при тестировании при вставке объектов в mon go все работает, как ожидалось. Я получаю ожидаемые результаты et c. Когда я действительно перезапускаю приложение, я заметил, что вся информация такая, как я ожидал, за исключением фрагмента DcList. Он всегда перезаписывается последним элементом l oop. Я провел несколько тестов и просто не могу понять, почему это происходит?
stored: {Username:Admin Password:peopleeater FullName:Administrator Email:admin@here.com Role:Admin DcList:[]}
struct: {Username:Admin Password:peopleeater FullName:Administrator Email:admin@here.com Role:Admin DcList:[]}
stored: {Username:bob Password:password FullName:bob Email:bob@here.com Role:View DcList:[eriks]}
struct: {Username:bob Password:password FullName:bob Email:bob@here.com Role:View DcList:[eriks]}
stored: {Username:test Password:test1 FullName:test1 Email:test1@here.com Role:View DcList:[test1]}
struct: {Username:test Password:test1 FullName:test1 Email:test1@here.com Role:View DcList:[test1]}
stored: {Username:test2 Password:test2 FullName:test2 Email:test2@here.com Role:View DcList:[test2]}
struct: {Username:test2 Password:test2 FullName:test2 Email:test2@here.com Role:View DcList:[test2]}
stored: {Username:test3 Password:test3 FullName:test3 Email:test3@here.com Role:View DcList:[test1]}
struct: {Username:test3 Password:test3 FullName:test3 Email:test3@here.com Role:View DcList:[test1]}
in get stored: map[Admin:{Username:Admin Password:P@$$w0rd FullName:Administrator Email:admin@here.com Role:Admin DcList:[]} bob:{Username:bob Password:password FullName:bob Email:bob@here.com Role:View DcList:[test1]} test:{Username:test Password:test1 FullName:test1 Email:test1@here.com Role:View DcList:[test1]} test2:{Username:test2 Password:test2 FullName:test2 Email:test2@here.com Role:View DcList:[test1]} test3:{Username:test3 Password:test3 FullName:test3 Email:test3@here.com Role:View DcList:[test1]}]
Я подумал, может, мне следует инициализировать срез? Однако мне не приходилось делать это в прошлом, поэтому я не понимаю, где здесь, на данном этапе, это, кажется, происходит? Я знаю, что мне не хватает чего-то простого