V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  soap520  ›  全部回复第 1 页 / 共 1 页
回复总数  8
@Gota 明白了,那我把 stop 最后 close(chData)去掉是不是就行了。去掉之后看起来和你 1L 的方法就差不多了,只是没有重新给 chData 赋值(我也不清楚 slog hook 的用例里需不需要再给 chData 一个 channel )。
如果要很“完美”的话,我除了弄一个锁把 submit 里的 read chDone, enqueue data 保护起来之外想不到更好的办法了。
@Gota 确实,我把 stop 改成这样是不是就可以了。
```
func stop() {
close(chQuit)

for {
select {
case n := <-chData:
_ = n
default:
close(chData)
return
}
}
}
```
```
func submit(n int) error {
select {
case <-chQuit:
return ErrClosed
default:
}

chData <- n
return nil

}

func stop() {
close(chQuit)

for n := range chData {
// process data
_ = n
}

close(chData)
}
```

看看这样行不行,
submit 里面先判断一下 chQuit 是不是已经 close 了。
stop 处理完再 close chData 。

一种可能让人看起来有点担心的执行顺序是,1. submit 里, 判断 chQuit 还没关闭。2. stop 里,执行 close(chQuit)。3. submit 里,接着 chData <- n 。不过应该在你的用例中年问题不大。
godot
tiddlywiki
2022-10-10 21:56:14 +08:00
回复了 beimengyeyu 创建的主题 程序员 如何对比两个 list 的差异
听起来有点像是最小编辑距离。
2021-11-26 23:48:05 +08:00
回复了 WadeLaunch 创建的主题 Go 编程语言 在 Go 的 struct 中使用指针的坑
@soap520 * v 是 sourceList[i] 的一份 copy
2021-11-26 23:47:20 +08:00
回复了 WadeLaunch 创建的主题 Go 编程语言 在 Go 的 struct 中使用指针的坑
for i, v := range sourceList 的 v 是 sourceList 的一份 copy
也许你想写成 rows = append(rows, Row{Id: &sourceList[i].Id, Open: &sourceList[i].Open})
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   750 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 17ms · UTC 21:04 · PVG 05:04 · LAX 14:04 · JFK 17:04
Developed with CodeLauncher
♥ Do have faith in what you're doing.