我遇到了golang 1.16的奇怪行为。对于我的一个项目,我需要在字符串中迭代符文。所以,我创建了一个简单的迭代器,看起来像这样:func iterRunes(s string) <-chan rune { runes := make(chan rune); go func() { defer close(runes); for _, char := range s { runes <- char; } } () return runes;}它工作得很好,但我还需要枚举从这个值产生的值。所以,我写了另一个看起来像:func enumRunes(runes <-chan rune) <-chan struct {int; rune} { eRunes := make(chan struct {int; rune}); go func() { defer close(eRunes); i := 0; for r := range runes { eRunes <- struct {int; rune} {i, r}; i++; } } () return eRunes;}它也可以完美地工作。但是,如果我试图将它们组合在一起,我遇到了一个问题。我有两个代码片段要显示。enumRunes(iterRunes(pattern))第一个是: tmp := enumRunes(iterRunes(pattern)) z := <-tmp; for z.int < utf8.RuneCountInString(pattern) { fmt.Println("z = <- tmp;") fmt.Println(z) z = <- tmp; }它的输出是这样的:...z = <- tmp;{0 0}{0 0}z = <- tmp;{0 0}{0 0}z = <- tmp;{0 0}{0 0}z = <- tmp;...这里是结构类型。因此,我进入了无限循环,因为结构由于某种原因没有更新。第二个片段:z tmp := iterRunes(pattern) z := <-tmp; for qq := 0; qq < utf8.RuneCountInString(pattern); qq++ { fmt.Println("z = <- tmp;") fmt.Println(z) z = <- tmp; }这是符文类型,它工作正常。问题是为什么第一个代码段中没有更新。提前感谢您。zz
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消