gpt4 book ai didi

Go:抽象可迭代

转载 作者:IT王子 更新时间:2023-10-29 00:59:17 24 4
gpt4 key购买 nike

假设我想要一个方法,它应该或者返回一个chan 或者一个slice。例如,如果我想在新行到来时“跟随”文件,我需要一个 chan,如果我只想读取并返回现有行,我需要一个 slice 。

在这两种情况下,我只需要遍历这个返回值。这是 Python 中的一个抽象示例(它与文件无关,但有点展示了这个想法):

def get_iterable(self):
if self.some_flag:
return (x for x in self.some_iterable)
return [x for x in self.some_iterable]

def do_stuff(self):
items = self.get_iterable()
for item in items:
self.process(item)

现在,我在 Go 中很难做到这一点。我想我应该寻找像我应该返回的“可迭代接口(interface)”之类的东西,但我没有通过谷歌搜索一些现成的解决方案(抱歉,如果这只是我糟糕的谷歌搜索技能)。

做我想做的事情的最佳方式是什么?或者,也许整个设计对 Go 来说“不好”,我应该考虑其他事情?

最佳答案

Or, maybe, the whole design is "bad" for Go and I should consider something else?

虽然您可以在类型之上构建一些接口(interface),以便您可以像处理它们一样处理它们,但我认为这是一个糟糕的选择。更简单的方法是利用多个返回类型并使用 chan myType, []myType, error 定义你的 func 因为它是 return 然后只使用 3 种方式 if-else 检查错误,然后是陈或 slice 。像往常一样读取 channel ,像往常一样迭代 slice 。将适用于 myType 的代码放在辅助方法中,以便您可以从两个控制流中调用它。

我的钱说这不再是代码,而且也更加直接。我不必通过一些抽象来理解我有一个 channel 和随之而来的继承复杂性(chan 和 slice 是不协调的,所以试图对它们进行建模听起来像一场噩梦),而你只是有程序控制流程中的一个额外步骤。

关于Go:抽象可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250385/

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