Go 何时重用功能?

Go 何时重用功能?,go,Go,我的程序中有一个生成随机字符串的函数 func randString(s []rune, l int) string s是一段符文,包含字符串中可能的字符。我通过 在大写字母和小写字母的符文片段中。L 确定字符串的长度。这很有效。但我也需要 为html颜色代码生成随机十六进制字符串 似乎所有的消息来源都说重用代码是很好的编程实践。所以我 制作了另一个包含[1-9a-f]的[]符文,并将其输入randString。那个 是在我意识到stdlib已经包含int的格式化动词之前 非常适合我的类型 实

我的程序中有一个生成随机字符串的函数

func randString(s []rune, l int) string
s是一段符文,包含字符串中可能的字符。我通过 在大写字母和小写字母的符文片段中。L 确定字符串的长度。这很有效。但我也需要 为html颜色代码生成随机十六进制字符串

似乎所有的消息来源都说重用代码是很好的编程实践。所以我 制作了另一个包含[1-9a-f]的[]符文,并将其输入randString。那个 是在我意识到stdlib已经包含int的格式化动词之前 非常适合我的类型

实际上,重用randString函数还是单独编写代码更好 更有效的功能?我会生成一个随机的int,然后Sprintf它 不要像randString那样循环并生成6个随机整数。

1如果标准库中有精确的解决方案,您应该始终选择使用它。 因为:

对标准库进行了测试。所以它做它说的或我们期望它做的。即使其中有一个bug,它也会被你或其他人发现,并且会在没有你的工作/努力的情况下得到修复。 标准库是用惯用的Go编写的。与您可以编写的解决方案相比,它的速度可能更快,即使它比您需要的稍多一些。 标准库正在或可能会随着时间的推移而改进。您的程序可能会变得更快,这仅仅是因为在新的Go版本中改进了实现,而无需您的任何努力。 解决方案已呈现,这意味着它已准备就绪,无需您花费时间。 标准库是众所周知的,因此您的代码将更容易被其他人和您以后理解。 如果您已经导入了包,或者在不久的将来将导入包,这意味着由于库是静态链接的,所以开销为零或最小,因此您所需要的函数已经链接到您的程序到编译的可执行二进制文件。 2如果标准库提供了解决方案,但它是类似问题的通用解决方案和/或提供了超出您需要的解决方案: 这意味着它很可能不是您的最佳解决方案,因为它可能会占用更多内存和/或工作速度比您的解决方案慢。 您需要决定是否愿意牺牲这一点性能损失来换取上面列出的收益。这还取决于您需要使用它的方式和次数,例如,如果它是一次性的,则无所谓,如果它处于频繁调用的无休止循环中,则应仔细检查。 3另一方面:如果标准库提供的解决方案不是为解决您的问题而设计的,那么您应该避免使用该解决方案。。。 如果它的副作用恰好解决了您的问题:即使当前的实现是可以接受的,如果它是为其他目的而设计的,未来对它的改进可能会使您对它的使用完全无用,甚至可能破坏它。 更不用说它会让其他开发人员在一段时间后试图阅读、改进或使用您包含的代码时感到困惑。
作为旁注:这个问题正是关于您试图创建的函数的:我已经提出了许多非常有效的解决方案。

这是相当主观的,不具体,但我认为您不应该为了重用而重用代码。重复使用的代码越多,在应用程序的不同部分之间创建的依赖性就越多,因此维护和修改就越困难。易于理解和修改代码更为重要,尤其是在团队中工作时

对于您的特定示例,我将执行以下操作

如果在包/应用程序中只生成一次随机颜色,那么使用fmt.Sprintf%06x、rand.Intn256*256*256就完全可以了,正如Dave C所建议的那样


如果在多个地方生成随机颜色,我将创建函数func randColor string并调用它。请注意,现在您可以随意优化randColor实现,而无需更改其余代码。例如,您可以先使用randString实现randColor,然后再切换到更高效的实现。

您可能应该在上问这个问题,因为您的问题完全是主观的。除此之外,它的措辞也不是很好,为什么不修改randString?@evanmcdonnal:主观性并不是程序员话题性的一个具体标准,除非太多的主观性使问题偏离主题,就像这里一样。@RobertHarvey我以为程序员是在问关于设计/最佳实践/编码风格/ect的问题吗?@evanmcdonnal:你不是这么说的。你说程序员应该问这个问题,因为它完全是主观的。当然也有流行的观点,但我认为这仅仅是一种观点。在你的第一部分中,你可以为其他G ophers即Go程序员知道fmt.Sprintf%06x,rand.Intn256*256*256做什么以及它是如何工作的,但我必须猜测“+randStringhexRunes,6做什么,并阅读代码以了解如何工作。