Well I will only get the fields that have to be updated, not the entire object. Therefore I need to get the old object from the database, see what has changed, then insert it back.
On Aug 2, 2016 18:35, "roger peppe" <rogpe...@gmail.com> wrote: > On 2 August 2016 at 09:58, Rayland <guianul...@gmail.com> wrote: > > I am working in the context of an ODM. > > > > I have an update method, like this: > > > > func Update(key string, valuePtr interface{}) error > > > > > > Inside of this method I need to do a Get in order to get the old value, > > compare the modified fields and update them, then insert the new object > in > > the database. > > > > The problem is that inside the Update method I don't know what type > valuePtr > > is in order to make a second object and feed to the Get method, and then > if > > I call the Get method with an interface{} object it will crash because it > > can't Unmarshal (objects are kept as json in the database). > > FWIW Axel's solution can work well and I've use similar techniques in > places, > but I have sympathy for Jan's reservations. Why do you need to do a Get > before doing the Put - how can you tell which fields need to be updated? > I can't immediately see how what you suggest would be different from > just updating the database with the value directly. > > cheers, > rog. > > > > > On Tuesday, August 2, 2016 at 11:26:01 AM UTC+3, Dave Cheney wrote: > >> > >> Hypothetically, if there was a syntax in Go that did this, what would > you > >> do next ? In other words, what is the problem you are trying to solve > that > >> has lead you to needing this feature? > >> > >> On Tuesday, 2 August 2016 18:18:05 UTC+10, Rayland wrote: > >>> > >>> I basically need something like this: > >>> > >>> var obj = &Person{Name: "John"} // I don't know what type obj will be > >>> everytime > >>> var newObj interface{} > >>> > >>> initNewObj(obj) // now newObj is an empty object of type *Person > >>> > >>> > >>> > >>> > >>> On Tuesday, August 2, 2016 at 10:21:01 AM UTC+3, Dave Cheney wrote: > >>>> > >>>> TL;DR a shallow copy is easy, but it's almost never what you want. > >>>> > >>>> https://play.golang.org/p/wpWN3Znop8 > >>>> > >>>> Needing to copy an arbitrary value is usually an anti pattern as > values > >>>> can contain references to other values, which contain references to > other > >>>> values, which contain references to other values, sometimes leading > back to > >>>> the previous values. > >>>> > >>>> On Tuesday, 2 August 2016 17:13:21 UTC+10, Rayland wrote: > >>>>> > >>>>> Let's say I have an object A of some type. Is there a way to create a > >>>>> new object B with the same type as A without knowing the type of A in > >>>>> advance? > > > > -- > > 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. > > For more options, visit https://groups.google.com/d/optout. > -- 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. For more options, visit https://groups.google.com/d/optout.