Unmarshal [] байт в рекурсивную структуру с полем пользовательского интерфейса типа в Golang
type Node struct {
Entry Entry `json:"e"`
Children []child `json:"c"`
}
type child struct {
Distance int `json:"d"`
Node *Node `json:"n"`
}
type Entry interface {
Distance(Entry) int
json.Marshaler
json.Unmarshaler
}
Как показано выше, у меня есть рекурсивная структура с полем типа Entry (интерфейс). Это действительно BKTree.
Теперь я хочу реализовать его методы сериализации.
func (n *Node) addChild(e Entry) {
newnode := &Node{Entry: e}
loop:
d := n.Entry.Distance(e)
for _, c := range n.Children {
if c.Distance == d {
n = c.Node
goto loop
}
}
n.Children = append(n.Children, child{d, newnode})
}
func (n *Node) Save(path string) error {
buf, err := json.Marshal(n)
if err != nil {
return err
}
file, err := os.Create(path)
if err != nil {
return err
}
writer := bufio.NewWriter(file)
defer writer.Flush()
_, err = writer.Write(buf)
return err
}
Но я понятия не имею, как я могу удалить его из файла с помощью метода Save. Любой ответ приветствуется.