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. Любой ответ приветствуется.

0 ответов

Другие вопросы по тегам