2 回答
TA贡献1946条经验 获得超4个赞
1) 如果标准库中有一个精确的解决方案,你应该总是选择使用它。
因为:
测试标准库。所以它做它所说的(或我们期望它做的)。即使其中存在错误,它也会被(您或其他人)发现并且无需您的工作/努力即可修复。
标准库是用惯用的 Go 编写的。与您可以编写的解决方案相比,即使它比您需要的多一点,它也有可能更快。
标准库正在(或可能)随着时间的推移而改进。您的程序可能会变得更快,因为在新的 Go 版本中改进了实现,而无需您的任何努力。
提供了解决方案(这意味着它已准备就绪,不需要您花时间)。
标准库是众所周知的,因此您的代码将更容易被其他人和您以后理解。
如果您已经导入了包(或将在不久的将来导入),这意味着由于库是静态链接的,因此开销为零或最小,因此您需要的函数已经链接到您的程序(到编译后的可执行二进制文件)。
2)如果标准库提供了解决方案,但它是类似问题的通用解决方案和/或提供的超出您的需要:
这意味着它更有可能不是您的最佳解决方案,因为它可能会像您的解决方案一样使用更多内存和/或工作得更慢。
您需要决定是否愿意为了上面列出的收益而牺牲一点性能损失。这也取决于您需要使用它的方式和次数(例如,如果它是一次性的,则无关紧要,如果它处于非常频繁调用的无限循环中,则应仔细检查)。
3)另一方面:如果标准库提供的解决方案不是为解决您的问题而设计的,则应避免使用该解决方案...
如果碰巧它的“副作用”解决了你的问题:即使当前的实现是可以接受的,如果它是为其他东西设计的,未来的改进可能会使你对它的使用完全无用,甚至可能会破坏它。
更不用说它会使其他试图阅读、改进或使用您的代码的开发人员感到困惑(经过一段时间后,您也包括在内)。
TA贡献1820条经验 获得超2个赞
这是相当主观的而不是特定于 go 的,但我认为您不应该仅仅为了重用而重用代码。您重用的代码越多,您在应用程序的不同部分之间创建的依赖关系就越多,因此维护和修改变得更加困难。易于理解和修改代码更为重要,尤其是如果您在团队中工作。
对于您的特定示例,我将执行以下操作。
如果在您的包/应用程序中只生成一次随机颜色,则使用fmt.Sprintf("#%06x", rand.Intn(256*256*256))
非常好(如 Dave C 所建议的)。
如果在多个地方生成随机颜色,我会创建函数func randColor() string
并调用它。请注意,现在您可以根据randColor
自己的喜好优化实现,而无需更改其余代码。例如,您可以先randColor
使用 using实现randString
,然后再切换到更高效的实现。
- 2 回答
- 0 关注
- 189 浏览
添加回答
举报