gchan

优雅的Channel操作。原生的channel操作在channel关闭后再向channel发送数据,或者多次关闭channel会引发panicgchan模块使得channel的操作变得优雅,当然,这一部分优雅是需要牺牲一部分的操作性能来实现的。gchan的使用方式同标准库的chan

使用场景

所有使用chan的场景都可使用gchan替代。

使用方式

  1. import "gitee.com/johng/gf/g/container/gchan"

方法列表godoc.org/github.com/johng-cn/gf/g/container/gchan

  1. type Chan
  2. func New(limit int) *Chan
  3. func (q *Chan) Close()
  4. func (q *Chan) Pop() interface{}
  5. func (q *Chan) Push(v interface{}) error
  6. func (q *Chan) Size() int

gchan与原生channel的性能测试:

  1. john@johnstation:~/Workspace/Go/GOPATH/src/gitee.com/johng/gf/g/container/gchan$ go test *.go -bench=".*"
  2. goos: linux
  3. goarch: amd64
  4. BenchmarkGchanPushAndPop-8 20000000 71.9 ns/op
  5. BenchmarkChannelPushAndPop-8 50000000 39.3 ns/op
  6. PASS
  7. ok command-line-arguments 3.663s