Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Field ¶
Field ♏ |作者:吴翔宇| 🍁 |日期:2022/10/29|
Field 结构体是我们自定义的,它用来描述目标结构体中某个字段的具体信息,比如我们定一个结构体如下代码所示:
type Dog struct { Nick string `rlp:"nilString"` Age uint8 }
那么用来描述Dog结构体里Nick字段的 Field 实例应该是这样的:
Field{Name: "Nick", Index: 0, Exported: true, Type: {Name: "string", Kind: reflect.String, IsEncoder: false, IsDecoder: false, Elem: nil}, Tag: `rlp:"nilString"`}
type NilKind ¶
type NilKind uint8
NilKind ♏ |作者:吴翔宇| 🍁 |日期:2022/10/29|
NilKind 用来表示不同类型的数据在它们取值为零值时,该被看作是什么样的零值,在rlp编码中,零值类型只有两种, 一种是被标记为 NilKindString 的空字符串类型,另一种是被标记为 NilKindList 的空列表类型。
type Tag ¶
type Tag struct { // NilKind 我们在定义结构体字段时,可能会在tag处手动设置该字段的NilKind,例如: // Name string `rlp:"nilString"` NilKind NilKind // NilManual 如果我们在定义结构体字段时手动的在tag处为其设置了NIlKind,则NilManual会被设置为true NilManual bool // Optional 如果结构体字段的tag被设置为`rlp:"optional"`,那么Optional被设置为true。要求如果该结构体的编码规则被设置 // 为`rlp:"optional"`,则其后的所有字段的rlp编码规则都必须被设置为`rlp:"optional"`,但是,有一种情况除外,那就是如果 // 结构体的最后一个字段是一个切片,并且想为该字段设置"tail",则不必为该字段的tag再设置"optional"。编码规则被设置为 // `rlp:"optional"`的字段,在编码时,如果该字段的值等于零值,则不被编码,并且其后的所有字段都不会被编码(即使存在值为非空的字段)。 Optional bool // Tail 如果结构体字段的tag被设置为`rlp:"tail"`,那么Tail被设置为true。只有结构体最后一个可导出且类型必须是切片类型的字段的编码 // 规则才能被设置为`rlp:"tail"`,在对切片类型的数据编码时,数据会被看成是一个列表,如果该数据的编码规则被设置为`rlp:"tail"`, // 那么就不会再将其看成是列表,而是把列表里面的数据拎出来逐个进行编码。 Tail bool // Ignored 结构体字段的编码规则如果被设置成`rlp:"-"`,那么Ignored被设置为true。编码规则被设置为`rlp:"-"`的字段不参与编码。 Ignored bool }
Tag ♏ |作者:吴翔宇| 🍁 |日期:2022/10/29|
Tag 用来表示我们自定义的结构体中字段的tag值,例如`json:"name"` 或者 `rlp:"-"`等。
type TagError ¶
type TagError struct { // StructType 指出那个结构体的tag设置出了错误 StructType string // Field 进一步指出结构体哪个字段的tag设置出了错误 Field string // Tag 用来显示被设置错误的tag长什么样 Tag string Err string }
TagError ♏ |作者:吴翔宇| 🍁 |日期:2022/10/29|
TagError 定义了结构体字段在设置tag时可能出现的错误,这里我们只针对`rlp:"xxx"`这样的tag,像json这样的tag我们不关注。
type Type ¶
type Type struct { // Name 用字符串来描述该Type所指向的具体类型,例如"string"、"*[3]uint8",甚至是我们自己定义的数据类型:"math.HexOrDecimal256" Name string // Kind 用 reflect.Kind 来描述该Type所指向的具体类型,例如 reflect.String、reflect.Slice 等 Kind reflect.Kind // IsEncoder 用来指示该Type描述的数据类型是否实现了 Encoder 接口,即是否实现了 EncodeRLP 方法 IsEncoder bool // IsDecoder 用来指示该Type描述的数据类型是否实现了 Decoder 接口,即是否实现了 DecodeRLP 方法 IsDecoder bool // Elem 如果该Type描述的是一个指针、数组或者切片,那么指针所指向的数据、数组和切片所存储的数据, // 这些数据的类型会被递归的获取到,并存储在Elem字段里 Elem *Type }
Type ♏ |作者:吴翔宇| 🍁 |日期:2022/10/29|
Type 是我们自己定义的一个结构体,用它来表示变量的类型信息,类似于简化版的 reflect.Type。
func (Type) DefaultNilValue ¶
DefaultNilValue ♏ |作者:吴翔宇| 🍁 |日期:2022/10/29|
DefaultValue 方法返回 Type 描述的类型默认的零值类型:NilKindString 或者 NilKindList。