V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  sexoutsex2011  ›  全部回复第 1 页 / 共 49 页
回复总数  967
1  2  3  4  5  6  7  8  9  10 ... 49  
@blufaux #34 同不行了
21 天前
回复了 carykel 创建的主题 Apple 我被苹果生态绑定的原因就只有一个
是的,同被绑死在「共享图库」上。
21 天前
回复了 seyoatda 创建的主题 Arc Arc 使用体验
@adekang
>> 创建账户必须用申请时填的邮箱账号
@AoEiuV020JP 抱歉抱歉
我蛮帮你问了大模型,你试试看:

这段 Go 代码的主要问题是,它在等待一个信号来表明发送 goroutine 已经结束,但是这个信号从未被发送。当`sum`大于 3 时,接收循环会中断,但是发送 goroutine 会因为`intChan`的缓冲区已满而阻塞,导致无法到达打印`"End [SEND]"`的代码行。

要解决这个问题,你需要确保发送 goroutine 有机会发送完成信号。在这个场景中,你可以通过关闭`intChan`来实现,因为关闭一个通道会导致所有接收者收到一个零值,并且随后的接收都会立即返回零值,而不会阻塞。因为`intChan`是一个 int 类型的通道,接收者会得到一个`0`。

以下是修正后的代码,它确保了打印出`"End [SEND]"`:

```go
package main

import (
"fmt"
"time"
)

func main() {
intChan := make(chan int, 1)
ticker := time.NewTicker(time.Second)
done := make(chan struct{}) // 添加一个完成通道

go func() {
for range ticker.C {
select {
case intChan <- 1:
case intChan <- 2:
case intChan <- 3:
}
}
ticker.Stop() // 停止 ticker
close(intChan) // 关闭 intChan
fmt.Println("End [SEND]")
close(done) // 发送完成信号
}()

var sum int

for e := range intChan {
fmt.Printf("接收到 %d\n", e)
sum += e
if sum > 3 {
fmt.Println(sum)
break
}
}

fmt.Println("End [REC]")

<-done // 等待发送 goroutine 完成
}
```

这里做了以下改动:

1. 添加了一个`done`通道,用来接收发送 goroutine 完成的信号。
2. `ticker.Stop()`被调用来停止 ticker ,避免资源泄露。
3. 在发送循环结束后关闭`intChan`通道。
4. 打印`"End [SEND]"`后,关闭`done`通道来发送一个完成信号。
5. 在主函数的最后,添加`<-done`来等待发送 goroutine 完成。

现在程序会等待发送 goroutine 结束后,才结束`main`函数,确保`"End [SEND]"`被打印出来。请注意,这个版本的代码假设发送 goroutine 总是会结束,否则可能会导致死锁。在实际编程中,你可能需要添加超时或其他机制来处理这种情况。
73 天前
回复了 sickoo 创建的主题 iPhone 2024 了, ios 都在用什么输入法
微信输入法,自带双拼会卡机
我没有勇气整理统计
咨询个问题:Temu 到底如何发音?
>> 我姑父在厦门开了很多年棋校

国际象棋吗?
支持一下
143 天前
回复了 pclsm 创建的主题 职场话题 打开公司群,我惊呆了!
up 主没有 996
iij1EXOoxROfdZngES
爷青回
189 天前
回复了 luffy 创建的主题 Windows Edge 突然变模糊,不可用
从 Edge 换 Arc 一周了
1  2  3  4  5  6  7  8  9  10 ... 49  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1016 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 44ms · UTC 19:31 · PVG 03:31 · LAX 12:31 · JFK 15:31
Developed with CodeLauncher
♥ Do have faith in what you're doing.