C ++风格的Golang迭代器

时间:2018-02-03 19:11:14

标签: go iterator

我已经开始学习Go了,我知道C ++语言。 可以在C ++中以相同的方式使用切片或列表吗?例如,在C ++中,我们可以使用迭代器指向集合中的位置,如上所示:

#include <list>

int main() {
    std::list<int> list = {1,1,2,3,1,4,5,6,7,8,1,1,9,10};
    auto it = std::find(list.begin(), list.end(), 3);
    // Now I can use the 'it' for insert items, remove/transform diaposonces etc.
   ++it;
   list.erase(it, std::remove(it, list.end(), 1);
}

按照我们的意愿向前/向后迭代。这样的任务有什么好的做法?在Golang中使用迭代器的最有效方法是什么?

1 个答案:

答案 0 :(得分:4)

Go和C ++是非常不同的语言。不要尝试在Go中使用C ++ STL样式。其他Go程序员不会看到你想要做的事情。

我使用的几乎所有Go代码都使用数组/切片索引而不是迭代器。在奇怪的情况下,链表是有意义的,你只能持有头尾指针。

尝试编写STL样式代码需要Go没有的模板。试图在Go中编写“通用”代码导致界面{}的可怕灾难以及阅读丑陋并且比他们应该执行的情况差5倍的反射。

只需在Go中编写Go样式代码。