go promise 异步函数实现
go 语言的promise异步函数
go 语言的异步书写方式就不再赘述,相关的资料网上有很多。通过一些简单的学习之后,我一直觉使用方式很别扭,比如我想异步并在函数执行之前不退出程序,就需要用在代码中往管道中写值,并读出来值,否则就会死锁。
后来思考之后,试着实现了一个通用的方法,该方法并未实现绝对的通用,但是至少是一个改善的思路。有幸感兴趣的朋友如果恰巧看到该实现,觉得有趣可以一起探讨。
promise.go
package promise import "sync" type Promise struct { wg sync.WaitGroup } func (p *Promise) Add(f func()) { p.wg.Add(1) go func() { f() defer p.wg.Done() }() } func (p *Promise) End() { p.wg.Wait() }
main.go
package main import ( "fmt" "promise" ) func t(i int) func() { return func() { fmt.Println(i) } } func main() { var promise promise.Promise for i := 0; i < 10; i++ { promise.Add(t(i)) } promise.End() } // print -> 9 // print -> 6 // print -> 7 // print -> 8 // print -> 3 // print -> 2 // print -> 4 // print -> 0 // print -> 1 // print -> 5
返回的结果每次都会不一样,有兴趣可以动手试一试以上代码。
相关推荐
nmgxzm00 2020-11-10
xixixi 2020-11-11
88254251 2020-11-01
MarukoMa 2020-09-02
88234852 2020-09-15
陈旭阳 2020-08-31
whynotgonow 2020-08-19
前端开发Kingcean 2020-07-30
whynotgonow 2020-07-29
bowean 2020-07-08
前端开发Kingcean 2020-07-08
88520191 2020-07-05
前端开发Kingcean 2020-06-27
88481456 2020-06-18
whynotgonow 2020-06-16
88520191 2020-06-13
88520191 2020-06-13
89500297 2020-06-13