【发布时间】:2019-05-09 08:15:02
【问题描述】:
我有几个事务结构:
SpendTx
NameTransferTx
NameUpdateTx
...
我想估计这些结构的大小,不包括费用字段。他们都有一个费用结构字段。目前,对于每个结构,我都有这个方法:
func (tx *NameTransferTx) sizeEstimate() (int, error) {
feeRlp, err := rlp.EncodeToBytes(tx.Fee)
if err != nil {
return 0, err
}
feeRlpLen := len(feeRlp)
rlpRawMsg, err := tx.RLP()
if err != nil {
return 0, err
}
return len(rlpRawMsg) - feeRlpLen + 8, nil
}
那是很多重复的代码,都是因为我写不出这样的东西:
type Tx interface {
RLP() ([]byte, error)
Fee utils.BigInt // Golang won't allow this
}
func estimateSizeOfTx(tx Tx) (int, error) {
feeRlp, err := rlp.EncodeToBytes(tx.Fee)
if err != nil {
return 0, err
}
feeRlpLen := len(feeRlp)
rlpRawMsg, err := tx.RLP()
if err != nil {
return 0, err
}
return len(rlpRawMsg) - feeRlpLen + 8, nil
}
当然,我可以编写一个像getFee() 这样的getter 函数并用它制作一个接口,但这并没有更好。还是其他人是这样的?
【问题讨论】:
-
如何编写一个带有公共字段的结构体,例如 priceTx,然后将其嵌入到其他结构体中?
-
这可能很有趣 - 不过尝试这种方法需要几个小时。
标签: go