github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/rlp/encoder_example_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:45</date> 10 //</624342663184781312> 11 12 13 package rlp 14 15 import ( 16 "fmt" 17 "io" 18 ) 19 20 type MyCoolType struct { 21 Name string 22 a, b uint 23 } 24 25 //encoderlp将x写为rlp list[a,b],省略name字段。 26 func (x *MyCoolType) EncodeRLP(w io.Writer) (err error) { 27 //注意:接收器可以是零指针。这允许你 28 //控制nil的编码,但这也意味着必须 29 //检查零接收器。 30 if x == nil { 31 err = Encode(w, []uint{0, 0}) 32 } else { 33 err = Encode(w, []uint{x.a, x.b}) 34 } 35 return err 36 } 37 38 func ExampleEncoder() { 39 var t *MyCoolType //T为零,指向mycoltype的指针 40 bytes, _ := EncodeToBytes(t) 41 fmt.Printf("%v → %X\n", t, bytes) 42 43 t = &MyCoolType{Name: "foobar", a: 5, b: 6} 44 bytes, _ = EncodeToBytes(t) 45 fmt.Printf("%v → %X\n", t, bytes) 46 47 //输出: 48 //<nil>→C28080 49 //&foobar 5 6→C20506 50 } 51