gpt4 book ai didi

go - 尝试了 monad 模式,但仍然有重复的错误处理

转载 作者:数据小太阳 更新时间:2023-10-29 03:43:35 25 4
gpt4 key购买 nike

我读了Rob Pike's post但它只适用于重复循环。另一方面,我有这个。请注意我是如何添加 err 字段的,该字段可通过 Error() 方法访问,但徒劳地试图减少 if 错误。

上面的代码比较简单,但是ReadRLP()函数和只返回一个err没什么区别。有什么模式可以帮助解决这个问题吗?

type namePreclaimRLP struct {
ObjectTag uint
RlpMessageVersion uint
AccountID []uint8
AccountNonce uint64
CommitmentID []uint8
Fee big.Int
TTL uint64
err error
}

func (n *namePreclaimRLP) ReadRLP(s *rlp.Stream) (aID, cID string) {
blob, err := s.Raw()
if err != nil {
n.err = err
}
err = rlp.DecodeBytes(blob, n)
if err != nil {
n.err = err
}
_, aID, err = readIDTag(n.AccountID)
if err != nil {
n.err = err
}
_, cID, err = readIDTag(n.CommitmentID)
if err != nil {
n.err = err
}
return aID, cID
}

func (n *namePreclaimRLP) Error() (err error) {
return n.err
}

最佳答案

你的代码没有像写的那样编译(有很多缺失的类型),所以我不能完全测试这段代码,但我希望沿着这些方向返回 err典型的 Go 方法,而不是使其成为另一种类型的一部分,这是不寻常且有点令人困惑的:

func (n *namePreclaimRLP) ReadRLP(s *rlp.Stream) (aID, cID string, err error) {
var blob SomeType // Depends on what blob actually is
if blob, err = s.Raw(); err != nil {
return
}

if err = rlp.DecodeBytes(blob, n); err != nil {
return
}

if _, aID, err = readIDTag(n.AccountID); err != nil {
return
}

_, cID, err = readIDTag(n.CommitmentID)

return
}

我会在此处删除您的 Error() 函数和 err 字段。 namePreclaimRLP 不是一种错误。感觉你在滥用那里的界面。

关于go - 尝试了 monad 模式,但仍然有重复的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57381580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com