Hi there! ¿How you doing?

I'm trying to implement a simple in-memory storage, that holds entities 
under a map. The entities shall be identificables, as they have an Id. And 
I want that id to be set by the underlying persistent subsystem on creation 
time. So I wrote this

type Identificable interface {
GetId() int
SetId(id int)
}

type EntitiesMemoryRepository[E Identificable] struct {
entitiesById map[int]E
idSequence  int
mutex       sync.Mutex
}

func (repo *EntitiesMemoryRepository[E]) CreateEntity(entity E) (E, error) {
repo.mutex.Lock()
defer repo.mutex.Unlock()
nextId := repo.idSequence + 1
entity.SetId(nextId)
repo.entitiesById[nextId] = entity
repo.idSequence++
return entity, nil
} // my in memory db implementation doesn't generate any error, but a 
external db may arise any kind of error

The problem arises when I try to use it... as the entity must be mutable I 
need to work with pointers, right? So I do this:

type User struct {
Id   int
Name string
}

func (user User) GetId() int {
return user.Id
}

func (user *User) SetId(id int) {
user.Id = id
}
func main() {
repo := repositories.NewEntitiesMemoryRepository[*User]()

user := User{Name: "John"}
cu, err := repo.CreateEntity(&user)
if err != nil {
panic(err)
}
fmt.Printf("%+v %T\n", cu, cu)

createdUser, err := repo.GetEntityById(1)
if err != nil {
panic(err)
}
fmt.Printf("%+v %T\n", createdUser, createdUser)
}

And everything goes all right.

I just keep wondering if that is correct approach, and, in any case, if any 
of you guys have reach a similar scenario and how do you solve it. I guess 
I'm looking for opinions.
Well that would be all, thanks in advance! 

Greetings
V

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/33b54649-e1bf-443e-883b-8e159079b52an%40googlegroups.com.

Reply via email to