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