github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/event/example_subscription_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:38</date> 10 //</624450090936832000> 11 12 13 package event_test 14 15 import ( 16 "fmt" 17 18 "github.com/ethereum/go-ethereum/event" 19 ) 20 21 func ExampleNewSubscription() { 22 //创建在ch上发送10个整数的订阅。 23 ch := make(chan int) 24 sub := event.NewSubscription(func(quit <-chan struct{}) error { 25 for i := 0; i < 10; i++ { 26 select { 27 case ch <- i: 28 case <-quit: 29 fmt.Println("unsubscribed") 30 return nil 31 } 32 } 33 return nil 34 }) 35 36 //这是消费者。它读取5个整数,然后中止订阅。 37 //请注意,取消订阅会一直等到生产者关闭。 38 for i := range ch { 39 fmt.Println(i) 40 if i == 4 { 41 sub.Unsubscribe() 42 break 43 } 44 } 45 //输出: 46 //零 47 //一 48 //二 49 //三 50 //四 51 //退订 52 } 53