gpt4 book ai didi

go - 处理 struct 的 `New()` 错误的最佳实践

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

给定:

type A struct{}

func New() *A {
return &A{}
}

处理构建期间发生的错误的基于最佳实践的建议是什么?

现实世界的场景是根据一些可能无效的 location string 为特定的 time.Location 构造一个 time.Time .

编辑:

这不仅仅是“构造函数应该返回错误”。我想讨论替代方案。

例如,如果它没有返回错误,也许我们不允许将值传递到可能导致错误的构造函数中。

我想考虑不同方法的优点。

编辑 2:

可能的方法:

  1. 在构造函数中返回一个错误
  2. 只返回一个有效的结构并且不允许潜在无效的构造函数参数
  3. 出错时返回一个 nil 结构实例

编辑 3:

评级标准

  1. 调用代码行
  2. 自己的代码行
  3. 模糊程度

最佳答案

根据我看到的投票/评论,我会自己回答并结束。如果有人想完善我的答案,请发表评论。

1) 在构造函数中返回一个错误

优点

  • 允许调用代码本身处理较少的逻辑

缺点

  • 不允许调用代码进行内联赋值,因为它会返回多个参数。

2) 不允许可能无效的构造函数参数

例如,不要接受需要解析为time.Time 的字符串日期。相反,需要一个 time.Time 的实例作为参数。

优点

  • 允许调用代码进行内联赋值
  • 启用合理的默认值

缺点

  • 与复合字面值相比,使构造函数更不方便
  • 可能需要为该结构提供额外的独立便捷方法
  • 需要调用代码来处理更多逻辑

3) 允许可能无效的构造函数参数并在其位置使用合理的默认值

“将错误推迟到稍后的函数被调用”

优点

  • 允许调用代码进行内联赋值

缺点

  • 很难知道是否接受了所需的参数

4) 出错时返回一个 nil 结构实例

这是可能的,但不是一个好主意。有些人甚至会说邪恶。

优点

  • 允许内联赋值
  • 让调用代码更简单/简单

缺点

  • 不是典型的(即惯用的)Go 代码
  • 隐藏原因
  • 允许调用代码简单

关于go - 处理 struct 的 `New()` 错误的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56905929/

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