V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
KaynW
V2EX  ›  Go 编程语言

Golang 怎么友好的关闭一个 chan?

  •  
  •   KaynW · 2019-10-20 23:39:13 +08:00 · 3790 次点击
    这是一个创建于 1879 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT 友好又是怎么定义的呢?(纯小白)

    8 条回复    2019-10-21 12:15:34 +08:00
    ClericPy
        1
    ClericPy  
       2019-10-21 02:23:32 +08:00   ❤️ 1
    我还以为你要问怎么用 select + timeout 的情况下优雅停止 goroutine...

    还真没去想过 chan 要我关...
    ClericPy
        2
    ClericPy  
       2019-10-21 02:25:15 +08:00
    搜了一把, 还真有优雅关闭 chan 的情况, 长见识了
    wangking
        3
    wangking  
       2019-10-21 02:38:24 +08:00
    要考虑的情景太多了,看的脑壳疼
    catror
        4
    catror  
       2019-10-21 05:03:13 +08:00 via Android   ❤️ 2
    1. 只由 sender 来关闭
    2. 一般不考虑关闭,除了一种情况:receiver 必须知道 sender 已经停止发送了
    javapythongo
        5
    javapythongo  
       2019-10-21 09:46:16 +08:00
    感觉一般不太需要关闭
    reus
        6
    reus  
       2019-10-21 12:13:38 +08:00
    谁发送谁关闭
    kid1412621
        7
    kid1412621  
       2019-10-21 12:13:48 +08:00
    我还以为你说的是 4chan
    reus
        8
    reus  
       2019-10-21 12:15:34 +08:00   ❤️ 1
    如果有多个发送者,就用一个 sync.WaitGroup,每次增加发送者时 Add,发送者结束时 Done,最后在需要关闭的时候 Wait 完再 close。通知发送者结束可以用 context.Context.Done
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3129 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:48 · PVG 12:48 · LAX 20:48 · JFK 23:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.