Расширение https://github.com/golang/go/issues/39242 ...
Я пытаюсь сгладить внутренний фрагмент, прикрепив внешний фрагмент, а затем отменить вывод выравнивания внешнего фрагмента, прикрепив внутренний фрагмент
https://play.golang.org/p/2tubtql5UwB
package main
import (
"fmt"
)
func main() {
inner := make([]interface{}, 0)
inner = append(inner, map[string]interface{}{"id": "1"})
inner = append(inner, map[string]interface{}{"id": "2"})
inner = append(inner, map[string]interface{}{"id": "3"})
outer := make([]interface{}, 0)
outer = append(outer, map[string]interface{}{"id": "A", "inner": inner})
fmt.Println(outer)
// flatten inner slice into 1 level
pivotInners := make([]interface{}, 0)
for _, itemOuter := range outer {
itemOuterMap := itemOuter.(map[string]interface{})
innerSlice := itemOuterMap["inner"].([]interface{})
delete(itemOuterMap, "inner")
for _, itemInner := range innerSlice {
itemInnerMap := itemInner.(map[string]interface{})
itemInnerMap["outer"] = itemOuterMap
pivotInners = append(pivotInners, itemInner)
}
}
fmt.Println(pivotInners)
// flatten outer slice to 1 level
pivotOuters := make([]interface{}, 0)
for _, pivotInner := range pivotInners {
pivotInnerMap := pivotInner.(map[string]interface{})
outerX := pivotInnerMap["outer"].(map[string]interface{})
delete(pivotInnerMap, "outer")
// dump row
outerX["inner"] = pivotInnerMap
fmt.Println(outerX)
pivotOuters = append(pivotOuters, outerX)
}
// dump collection
fmt.Println(pivotOuters)
}
Внутренние срезы
map[id:1]
map[id:2]
map[id:3]
Внешний срез
[map[id:A inner:[map[id:1] map[id:2] map[id:3]]]]
Внутренняя ось
[map[id:1 outer:map[id:A]] map[id:2 outer:map[id:A]] map[id:3 outer:map[id:A]]]
Ожидаю
Внешняя ось
[map[id:A inner:map[id:1]] map[id:A inner:map[id:2]] map[id:A inner:map[id:3]]]
но получил
Внешняя опорная точка
Если я повторю внутреннюю строку, она вернет правильное значение
map[id:A inner:map[id:1]]
map[id:A inner:map[id:2]]
map[id:A inner:map[id:3]]
, но после добавления slice получил только последнюю строку
[map[id:A inner:map[id:3]] map[id:A inner:map[id:3]] map[id:A inner:map[id:3]]]
Кто-нибудь знает?