package rlp import ( "fmt" "io" ) type MyCoolType struct { Name string a, b uint } // EncodeRLP writes x as RLP list [a, b] that omits the Name field. func (x *MyCoolType) EncodeRLP(w io.Writer) (err error) { // Note: the receiver can be a nil pointer. This allows you to // control the encoding of nil, but it also means that you have to // check for a nil receiver. if x == nil { err = Encode(w, []uint{0, 0}) } else { err = Encode(w, []uint{x.a, x.b}) } return err } func ExampleEncoder() { var t *MyCoolType // t is nil pointer to MyCoolType bytes, _ := EncodeToBytes(t) fmt.Printf("%v → %X\n", t, bytes) t = &MyCoolType{Name: "foobar", a: 5, b: 6} bytes, _ = EncodeToBytes(t) fmt.Printf("%v → %X\n", t, bytes) // Output: // → C28080 // &{foobar 5 6} → C20506 }