Had same issue recently and worked around it using standard golang syntax below
type mergeit struct { One FirstStruct Second SecondStruct } var finalmerge mergeit then simply reference using finalmerge.One = "blah blah blah" On Monday, 21 November 2016 19:02:05 UTC, Howard C. Shaw III wrote: > > What is the intended use-case for this? Depending on the purpose, you > might have a look at mergo, https://github.com/imdario/mergo as it does > something similar, mostly for pulling configuration settings from multiple > places and combining them with defaults. > > For JSON maps, there is https://github.com/peterbourgon/mergemap , and > for simpler situations (i.e. merging JSON structs without merging embedded > slices or maps), this solution https://play.golang.org/p/8jlJUbEJKf from > rog in this post > https://groups.google.com/forum/#!topic/golang-nuts/nLCy75zMlS8. > > As to the code itself, let's see... > > I do find it a little odd that when asked to merge A, and B, passed in > that order, it returns B, A when both items are ints or strings, but if A > is a slice, then B is appended to A's slice. > > So mergeDataStructures("A", "B") = ["B", "A"], while > mergeDataStructures([]interface{}{"A"},"B") = ["A", "B"] > > Just looks like an accidental flipping of b and a to me, easily fixed. > > Meanwhile mergeDataStructures("A",[]interface{}{"B"}) panics. (i.e. case > string: case []interface{}), and even if that code did work, it only > references a, so it would be returning an incomplete result even if it did > work. > > When handed two similar items on the same level - two strings or two ints > or an int and a string, it promotes the return object to a slice, whereas > when the same key with different values appears in two maps being merged, > one overwrites the other instead of being promoted. It can't handle structs > apparently at all (just a suggestion: many structs can be JSON marshaled > and unmarshaled to an map[string]interface{}, which might let them be > incorporated fairly simply). > > Moving on to the question of elegance: > > To my knowledge, there is no simpler way in Go to merge two maps other > than to iterate over one, settings the keys and values into the other > (obviously, the one being iterated over effectively has precedence, > overwriting the corresponding values in the other). As to merging slices as > you have done, well, that rather depends on the intended semantics, so I'm > not sure you can do it generically without being wrong for at least some > cases. After all, a slice in an arbitrary data structure or document might > be sorted or unsorted, or it might be being used as a set and so need to > reject duplicate items. > > So while it might need a few cases tweaked, I think in general you have a > reasonably workable solution. I do see that this code does not handle > hierarchical maps - it assigns all of a's map values to a map, then all of > b's to the same map, without regard for whether they are duplicated. > > Howard > -- 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.