for {
select {
case msg, ok := <-msgChan:
if !ok {
return
}
limit <- struct{}{}
go func(t *Message) {
send(t)
<-limit
}(msg)
}
}
msg 是*Message
这样的传参会导致 t 被下次循环的 msg 覆盖吗 (其实可以不这么控制并发,如果只能这么写的话
1
thet 2021-10-14 22:44:43 +08:00 via iPhone
不会
|
2
ch2 2021-10-14 23:18:58 +08:00
:= 出来是一个新的,下一次循环跟上一次没关系
|
3
rrfeng 2021-10-15 01:32:35 +08:00 via Android
这个 select 么有用,可以删掉。
|
4
rrfeng 2021-10-15 01:33:52 +08:00 via Android
这里的变量 t 没问题的,但是要小心你其他地方的程序同时操作指针所指向的对象,可能会有意想不到的后果。
|
5
fenglangjuxu 2021-10-15 10:02:19 +08:00
对说 不会 的标示存疑 观望中
|
6
x1aoYao 2021-10-15 11:13:59 +08:00
不会。这里即使用捕获而非传参的方式也不会
但是 go 的 for range 是一个变量要注意别直接 go 捕获 |
8
index90 2021-10-15 12:19:11 +08:00
没有问题,注意与以下的区别:
go func() { send(msg) <-limit }() 这样写就有问题 |