如何用未导出的指针对结构进行编码?

I have a struct that I can successfully gob encode and decode as follows:

type Node struct {
    Value int
    Next  *Node
}

myNode := Node{
    Value: 1,
    Next: &Node{
        Value: 2,
    },
}
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
dec := gob.NewDecoder(&buf)
if err := enc.Encode(&myNode); err != nil {
    panic(err)
}
var decodedNode Node
if err := dec.Decode(&decodedNode); err != nil {
    panic(err)
}

I'd like to now hide the fields of Node:

type Node struct {
    value int
    next  *Node
}

Because the fields are no longer exported I have to now write custom GobEncode and GobDecode functions:

func (d *Node) GobEncode() ([]byte, error) {
    var buf bytes.Buffer
    encoder := gob.NewEncoder(&buf)
    if err := encoder.Encode(d.value); err != nil {
        return nil, err
    }
    if err := encoder.Encode(d.next); err != nil {
        return nil, err
    }
    return buf.Bytes(), nil
}

func (d *Node) GobDecode(b []byte) error {
    buf := bytes.NewBuffer(b)
    decoder := gob.NewDecoder(buf)
    if err := decoder.Decode(&d.value); err != nil {
        return err
    }
    if err := decoder.Decode(&d.next); err != nil {
        return err
    }
    return nil
}

This doesn't work because of a nil value in Node.next:

panic: gob: cannot encode nil pointer of type *main.Node [recovered]
    panic: gob: cannot encode nil pointer of type *main.Node [recovered]
    panic: gob: cannot encode nil pointer of type *main.Node

I'm re-using gob.NewEncoder inside my custom function because I'm trying to re-use as much of the encode package as possible.

Any suggestions for getting this working?